{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Project: Indoor Navigation and Localization using Data Science"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "#All the needed libraries for the project\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import sys\n",
    "from pandas import DataFrame\n",
    "from mlxtend.preprocessing import minmax_scaling\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.metrics.pairwise import euclidean_distances\n",
    "from sklearn.utils import shuffle\n",
    "from scipy.spatial import distance\n",
    "np.random.seed(0)\n",
    "import seaborn as sns; sns.set()\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "sns.set()\n",
    "from sklearn.preprocessing import OneHotEncoder\n",
    "import keras\n",
    "from keras.models import Sequential\n",
    "from keras.callbacks import ModelCheckpoint\n",
    "import h5py\n",
    "from keras.models import load_model\n",
    "from keras.layers import Dense, Dropout, Activation\n",
    "from keras.preprocessing.text import Tokenizer\n",
    "from keras import layers, models, optimizers\n",
    "from keras import backend as K\n",
    "from sklearn.model_selection import train_test_split\n",
    "import random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Loading of the labeled data\n",
    "BLE_RSSI = pd.read_csv('datasets/iBeacon_RSSI_Labeled.csv') #Labeled dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Loading of the Unlabeled data\n",
    "BLE_RSSI_UL = pd.read_csv('datasets/iBeacon_RSSI_Unlabeled.csv')#Unlabeled dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>location</th>\n",
       "      <th>date</th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>O02</td>\n",
       "      <td>10/18/16 11:15</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-78</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>P01</td>\n",
       "      <td>10/18/16 11:15</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-78</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>P01</td>\n",
       "      <td>10/18/16 11:15</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-77</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>P01</td>\n",
       "      <td>10/18/16 11:15</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-77</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>P01</td>\n",
       "      <td>10/18/16 11:15</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-77</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>P01</td>\n",
       "      <td>10/18/16 11:15</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-82</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  location            date  b3001  b3002  b3003  b3004  b3005  b3006  b3007  \\\n",
       "0      O02  10/18/16 11:15   -200   -200   -200   -200   -200    -78   -200   \n",
       "1      P01  10/18/16 11:15   -200   -200   -200   -200   -200    -78   -200   \n",
       "2      P01  10/18/16 11:15   -200   -200   -200   -200   -200    -77   -200   \n",
       "3      P01  10/18/16 11:15   -200   -200   -200   -200   -200    -77   -200   \n",
       "4      P01  10/18/16 11:15   -200   -200   -200   -200   -200    -77   -200   \n",
       "5      P01  10/18/16 11:15   -200   -200    -82   -200   -200   -200   -200   \n",
       "\n",
       "   b3008  b3009  b3010  b3011  b3012  b3013  \n",
       "0   -200   -200   -200   -200   -200   -200  \n",
       "1   -200   -200   -200   -200   -200   -200  \n",
       "2   -200   -200   -200   -200   -200   -200  \n",
       "3   -200   -200   -200   -200   -200   -200  \n",
       "4   -200   -200   -200   -200   -200   -200  \n",
       "5   -200   -200   -200   -200   -200   -200  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Visulisation of first six data entries/rows in labled dataset\n",
    "BLE_RSSI.head(6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-197.825352</td>\n",
       "      <td>-156.623944</td>\n",
       "      <td>-175.533099</td>\n",
       "      <td>-164.534507</td>\n",
       "      <td>-178.378169</td>\n",
       "      <td>-175.063380</td>\n",
       "      <td>-195.637324</td>\n",
       "      <td>-191.970423</td>\n",
       "      <td>-197.145070</td>\n",
       "      <td>-197.442254</td>\n",
       "      <td>-197.748592</td>\n",
       "      <td>-197.233803</td>\n",
       "      <td>-196.065493</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>16.259105</td>\n",
       "      <td>60.217747</td>\n",
       "      <td>49.452958</td>\n",
       "      <td>56.523261</td>\n",
       "      <td>47.175799</td>\n",
       "      <td>49.596627</td>\n",
       "      <td>22.880980</td>\n",
       "      <td>30.733742</td>\n",
       "      <td>19.160207</td>\n",
       "      <td>17.741632</td>\n",
       "      <td>16.852535</td>\n",
       "      <td>18.541088</td>\n",
       "      <td>22.053924</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-78.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-80.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "      <td>-200.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>-67.000000</td>\n",
       "      <td>-59.000000</td>\n",
       "      <td>-56.000000</td>\n",
       "      <td>-56.000000</td>\n",
       "      <td>-60.000000</td>\n",
       "      <td>-62.000000</td>\n",
       "      <td>-58.000000</td>\n",
       "      <td>-56.000000</td>\n",
       "      <td>-55.000000</td>\n",
       "      <td>-61.000000</td>\n",
       "      <td>-59.000000</td>\n",
       "      <td>-60.000000</td>\n",
       "      <td>-59.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             b3001        b3002        b3003        b3004        b3005  \\\n",
       "count  1420.000000  1420.000000  1420.000000  1420.000000  1420.000000   \n",
       "mean   -197.825352  -156.623944  -175.533099  -164.534507  -178.378169   \n",
       "std      16.259105    60.217747    49.452958    56.523261    47.175799   \n",
       "min    -200.000000  -200.000000  -200.000000  -200.000000  -200.000000   \n",
       "25%    -200.000000  -200.000000  -200.000000  -200.000000  -200.000000   \n",
       "50%    -200.000000  -200.000000  -200.000000  -200.000000  -200.000000   \n",
       "75%    -200.000000   -78.000000  -200.000000   -80.000000  -200.000000   \n",
       "max     -67.000000   -59.000000   -56.000000   -56.000000   -60.000000   \n",
       "\n",
       "             b3006        b3007        b3008        b3009        b3010  \\\n",
       "count  1420.000000  1420.000000  1420.000000  1420.000000  1420.000000   \n",
       "mean   -175.063380  -195.637324  -191.970423  -197.145070  -197.442254   \n",
       "std      49.596627    22.880980    30.733742    19.160207    17.741632   \n",
       "min    -200.000000  -200.000000  -200.000000  -200.000000  -200.000000   \n",
       "25%    -200.000000  -200.000000  -200.000000  -200.000000  -200.000000   \n",
       "50%    -200.000000  -200.000000  -200.000000  -200.000000  -200.000000   \n",
       "75%    -200.000000  -200.000000  -200.000000  -200.000000  -200.000000   \n",
       "max     -62.000000   -58.000000   -56.000000   -55.000000   -61.000000   \n",
       "\n",
       "             b3011        b3012        b3013  \n",
       "count  1420.000000  1420.000000  1420.000000  \n",
       "mean   -197.748592  -197.233803  -196.065493  \n",
       "std      16.852535    18.541088    22.053924  \n",
       "min    -200.000000  -200.000000  -200.000000  \n",
       "25%    -200.000000  -200.000000  -200.000000  \n",
       "50%    -200.000000  -200.000000  -200.000000  \n",
       "75%    -200.000000  -200.000000  -200.000000  \n",
       "max     -59.000000   -60.000000   -59.000000  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "BLE_RSSI.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1420 entries, 0 to 1419\n",
      "Data columns (total 15 columns):\n",
      "location    1420 non-null object\n",
      "date        1420 non-null object\n",
      "b3001       1420 non-null int64\n",
      "b3002       1420 non-null int64\n",
      "b3003       1420 non-null int64\n",
      "b3004       1420 non-null int64\n",
      "b3005       1420 non-null int64\n",
      "b3006       1420 non-null int64\n",
      "b3007       1420 non-null int64\n",
      "b3008       1420 non-null int64\n",
      "b3009       1420 non-null int64\n",
      "b3010       1420 non-null int64\n",
      "b3011       1420 non-null int64\n",
      "b3012       1420 non-null int64\n",
      "b3013       1420 non-null int64\n",
      "dtypes: int64(13), object(2)\n",
      "memory usage: 166.5+ KB\n"
     ]
    }
   ],
   "source": [
    "BLE_RSSI.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>location</th>\n",
       "      <th>date</th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>?</td>\n",
       "      <td>11-7-2016 12:29:01</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-80</td>\n",
       "      <td>-200</td>\n",
       "      <td>-77</td>\n",
       "      <td>-56</td>\n",
       "      <td>-81</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>?</td>\n",
       "      <td>11-7-2016 12:29:00</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-80</td>\n",
       "      <td>-200</td>\n",
       "      <td>-78</td>\n",
       "      <td>-56</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>?</td>\n",
       "      <td>11-7-2016 12:28:59</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-81</td>\n",
       "      <td>-200</td>\n",
       "      <td>-74</td>\n",
       "      <td>-63</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>?</td>\n",
       "      <td>11-7-2016 12:28:58</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-75</td>\n",
       "      <td>-56</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>?</td>\n",
       "      <td>11-7-2016 12:28:57</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-82</td>\n",
       "      <td>-56</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "      <td>-200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  location                date  b3001  b3002  b3003  b3004  b3005  b3006  \\\n",
       "0        ?  11-7-2016 12:29:01   -200   -200    -80   -200    -77    -56   \n",
       "1        ?  11-7-2016 12:29:00   -200   -200    -80   -200    -78    -56   \n",
       "2        ?  11-7-2016 12:28:59   -200   -200    -81   -200    -74    -63   \n",
       "3        ?  11-7-2016 12:28:58   -200   -200   -200   -200    -75    -56   \n",
       "4        ?  11-7-2016 12:28:57   -200   -200   -200   -200    -82    -56   \n",
       "\n",
       "   b3007  b3008  b3009  b3010  b3011  b3012  b3013  \n",
       "0    -81   -200   -200   -200   -200   -200   -200  \n",
       "1   -200   -200   -200   -200   -200   -200   -200  \n",
       "2   -200   -200   -200   -200   -200   -200   -200  \n",
       "3   -200   -200   -200   -200   -200   -200   -200  \n",
       "4   -200   -200   -200   -200   -200   -200   -200  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Visulisation of first five data entries/rows in Unlabled dataset\n",
    "BLE_RSSI_UL.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "All location entries in unleabled dataset is marked with ? intentionally to show unlabled data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 5191 entries, 0 to 5190\n",
      "Data columns (total 15 columns):\n",
      "location    5191 non-null object\n",
      "date        5191 non-null object\n",
      "b3001       5191 non-null int64\n",
      "b3002       5191 non-null int64\n",
      "b3003       5191 non-null int64\n",
      "b3004       5191 non-null int64\n",
      "b3005       5191 non-null int64\n",
      "b3006       5191 non-null int64\n",
      "b3007       5191 non-null int64\n",
      "b3008       5191 non-null int64\n",
      "b3009       5191 non-null int64\n",
      "b3010       5191 non-null int64\n",
      "b3011       5191 non-null int64\n",
      "b3012       5191 non-null int64\n",
      "b3013       5191 non-null int64\n",
      "dtypes: int64(13), object(2)\n",
      "memory usage: 608.4+ KB\n"
     ]
    }
   ],
   "source": [
    "BLE_RSSI_UL.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    10/18/16 11:15\n",
       "1    10/18/16 11:15\n",
       "2    10/18/16 11:15\n",
       "3    10/18/16 11:15\n",
       "4    10/18/16 11:15\n",
       "Name: date, dtype: object"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "BLE_RSSI['date'].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      2016-10-18 11:15:00\n",
       "1      2016-10-18 11:15:00\n",
       "2      2016-10-18 11:15:00\n",
       "3      2016-10-18 11:15:00\n",
       "4      2016-10-18 11:15:00\n",
       "5      2016-10-18 11:15:00\n",
       "6      2016-10-18 11:15:00\n",
       "7      2016-10-18 11:15:00\n",
       "8      2016-10-18 11:15:00\n",
       "9      2016-10-18 11:15:00\n",
       "10     2016-10-18 11:15:00\n",
       "11     2016-10-18 11:14:00\n",
       "12     2016-10-18 11:14:00\n",
       "13     2016-10-18 11:14:00\n",
       "14     2016-10-18 11:14:00\n",
       "15     2016-10-18 11:14:00\n",
       "16     2016-10-18 11:14:00\n",
       "17     2016-10-18 11:14:00\n",
       "18     2016-10-18 11:14:00\n",
       "19     2016-10-18 11:14:00\n",
       "20     2016-10-18 11:14:00\n",
       "21     2016-10-18 11:14:00\n",
       "22     2016-10-18 11:14:00\n",
       "23     2016-10-18 11:14:00\n",
       "24     2016-10-18 11:14:00\n",
       "25     2016-10-18 11:14:00\n",
       "26     2016-10-18 11:14:00\n",
       "27     2016-10-18 11:14:00\n",
       "28     2016-10-18 11:14:00\n",
       "29     2016-10-18 11:14:00\n",
       "               ...        \n",
       "1390   2016-04-19 09:45:00\n",
       "1391   2016-04-19 09:45:00\n",
       "1392   2016-04-19 09:45:00\n",
       "1393   2016-04-19 09:44:00\n",
       "1394   2016-04-19 09:44:00\n",
       "1395   2016-04-19 09:44:00\n",
       "1396   2016-04-19 09:43:00\n",
       "1397   2016-04-19 09:43:00\n",
       "1398   2016-04-19 09:41:00\n",
       "1399   2016-04-19 09:41:00\n",
       "1400   2016-04-19 09:39:00\n",
       "1401   2016-04-19 09:39:00\n",
       "1402   2016-04-19 09:39:00\n",
       "1403   2016-04-19 09:39:00\n",
       "1404   2016-04-19 09:39:00\n",
       "1405   2016-04-19 09:39:00\n",
       "1406   2016-04-19 09:39:00\n",
       "1407   2016-04-19 09:39:00\n",
       "1408   2016-04-19 09:39:00\n",
       "1409   2016-04-19 09:39:00\n",
       "1410   2016-04-19 09:38:00\n",
       "1411   2016-04-19 09:38:00\n",
       "1412   2016-04-19 09:38:00\n",
       "1413   2016-04-19 09:38:00\n",
       "1414   2016-04-19 09:37:00\n",
       "1415   2016-04-19 09:37:00\n",
       "1416   2016-04-19 09:37:00\n",
       "1417   2016-04-19 09:37:00\n",
       "1418   2016-04-19 09:37:00\n",
       "1419   2016-04-19 09:37:00\n",
       "Name: date, Length: 1420, dtype: datetime64[ns]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dates = pd.to_datetime(BLE_RSSI['date'])\n",
    "dates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Drop the date column\n",
    "df = BLE_RSSI.drop(['date'],axis=1)\n",
    "#Drop the location column\n",
    "df = df.drop(['location'], axis=1)\n",
    "#min-max scaling\n",
    "scaled = minmax_scaling(df, columns=['b3001', 'b3002', 'b3003', 'b3004', 'b3005', 'b3006', 'b3007', \n",
    "                                     'b3008', 'b3009', 'b3010', 'b3011', 'b3012', 'b3013'])\n",
    "#Drop the date and location column from the unlabled dataset\n",
    "df_ul = BLE_RSSI_UL.drop(['date'],axis=1)\n",
    "df_ul = df_ul.drop(['location'], axis=1)\n",
    "#min-max scaling\n",
    "scaled_ul = minmax_scaling(df_ul, columns=['b3001', 'b3002', 'b3003', 'b3004', 'b3005', 'b3006', 'b3007', \n",
    "                                     'b3008', 'b3009', 'b3010', 'b3011', 'b3012', 'b3013'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.884058</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.884058</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   b3001  b3002  b3003  b3004  b3005     b3006  b3007  b3008  b3009  b3010  \\\n",
       "0    0.0    0.0    0.0    0.0    0.0  0.884058    0.0    0.0    0.0    0.0   \n",
       "1    0.0    0.0    0.0    0.0    0.0  0.884058    0.0    0.0    0.0    0.0   \n",
       "2    0.0    0.0    0.0    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "3    0.0    0.0    0.0    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "4    0.0    0.0    0.0    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "\n",
       "   b3011  b3012  b3013  \n",
       "0    0.0    0.0    0.0  \n",
       "1    0.0    0.0    0.0  \n",
       "2    0.0    0.0    0.0  \n",
       "3    0.0    0.0    0.0  \n",
       "4    0.0    0.0    0.0  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scaled.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "      <td>1420.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.016351</td>\n",
       "      <td>0.307632</td>\n",
       "      <td>0.169909</td>\n",
       "      <td>0.246288</td>\n",
       "      <td>0.154442</td>\n",
       "      <td>0.180700</td>\n",
       "      <td>0.030723</td>\n",
       "      <td>0.055761</td>\n",
       "      <td>0.019689</td>\n",
       "      <td>0.018401</td>\n",
       "      <td>0.015967</td>\n",
       "      <td>0.019759</td>\n",
       "      <td>0.027904</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.122249</td>\n",
       "      <td>0.427076</td>\n",
       "      <td>0.343423</td>\n",
       "      <td>0.392523</td>\n",
       "      <td>0.336970</td>\n",
       "      <td>0.359396</td>\n",
       "      <td>0.161134</td>\n",
       "      <td>0.213429</td>\n",
       "      <td>0.132139</td>\n",
       "      <td>0.127638</td>\n",
       "      <td>0.119522</td>\n",
       "      <td>0.132436</td>\n",
       "      <td>0.156411</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.865248</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             b3001        b3002        b3003        b3004        b3005  \\\n",
       "count  1420.000000  1420.000000  1420.000000  1420.000000  1420.000000   \n",
       "mean      0.016351     0.307632     0.169909     0.246288     0.154442   \n",
       "std       0.122249     0.427076     0.343423     0.392523     0.336970   \n",
       "min       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "25%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "50%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "75%       0.000000     0.865248     0.000000     0.833333     0.000000   \n",
       "max       1.000000     1.000000     1.000000     1.000000     1.000000   \n",
       "\n",
       "             b3006        b3007        b3008        b3009        b3010  \\\n",
       "count  1420.000000  1420.000000  1420.000000  1420.000000  1420.000000   \n",
       "mean      0.180700     0.030723     0.055761     0.019689     0.018401   \n",
       "std       0.359396     0.161134     0.213429     0.132139     0.127638   \n",
       "min       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "25%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "50%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "75%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "max       1.000000     1.000000     1.000000     1.000000     1.000000   \n",
       "\n",
       "             b3011        b3012        b3013  \n",
       "count  1420.000000  1420.000000  1420.000000  \n",
       "mean      0.015967     0.019759     0.027904  \n",
       "std       0.119522     0.132436     0.156411  \n",
       "min       0.000000     0.000000     0.000000  \n",
       "25%       0.000000     0.000000     0.000000  \n",
       "50%       0.000000     0.000000     0.000000  \n",
       "75%       0.000000     0.000000     0.000000  \n",
       "max       1.000000     1.000000     1.000000  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scaled.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.866197</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.856115</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.859155</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.850000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.887324</td>\n",
       "      <td>0.951389</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.880282</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.830986</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   b3001  b3002     b3003  b3004     b3005     b3006     b3007  b3008  b3009  \\\n",
       "0    0.0    0.0  0.857143    0.0  0.866197  1.000000  0.856115    0.0    0.0   \n",
       "1    0.0    0.0  0.857143    0.0  0.859155  1.000000  0.000000    0.0    0.0   \n",
       "2    0.0    0.0  0.850000    0.0  0.887324  0.951389  0.000000    0.0    0.0   \n",
       "3    0.0    0.0  0.000000    0.0  0.880282  1.000000  0.000000    0.0    0.0   \n",
       "4    0.0    0.0  0.000000    0.0  0.830986  1.000000  0.000000    0.0    0.0   \n",
       "\n",
       "   b3010  b3011  b3012  b3013  \n",
       "0    0.0    0.0    0.0    0.0  \n",
       "1    0.0    0.0    0.0    0.0  \n",
       "2    0.0    0.0    0.0    0.0  \n",
       "3    0.0    0.0    0.0    0.0  \n",
       "4    0.0    0.0    0.0    0.0  "
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scaled_ul.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "      <td>5191.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.151542</td>\n",
       "      <td>0.244684</td>\n",
       "      <td>0.134841</td>\n",
       "      <td>0.117878</td>\n",
       "      <td>0.295425</td>\n",
       "      <td>0.294207</td>\n",
       "      <td>0.105425</td>\n",
       "      <td>0.221045</td>\n",
       "      <td>0.111143</td>\n",
       "      <td>0.103849</td>\n",
       "      <td>0.086244</td>\n",
       "      <td>0.069944</td>\n",
       "      <td>0.084014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.330817</td>\n",
       "      <td>0.391870</td>\n",
       "      <td>0.306809</td>\n",
       "      <td>0.291359</td>\n",
       "      <td>0.401544</td>\n",
       "      <td>0.399285</td>\n",
       "      <td>0.284587</td>\n",
       "      <td>0.366523</td>\n",
       "      <td>0.290358</td>\n",
       "      <td>0.274008</td>\n",
       "      <td>0.252326</td>\n",
       "      <td>0.230648</td>\n",
       "      <td>0.256314</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.793478</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.816901</td>\n",
       "      <td>0.812500</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.692857</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             b3001        b3002        b3003        b3004        b3005  \\\n",
       "count  5191.000000  5191.000000  5191.000000  5191.000000  5191.000000   \n",
       "mean      0.151542     0.244684     0.134841     0.117878     0.295425   \n",
       "std       0.330817     0.391870     0.306809     0.291359     0.401544   \n",
       "min       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "25%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "50%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "75%       0.000000     0.793478     0.000000     0.000000     0.816901   \n",
       "max       1.000000     1.000000     1.000000     1.000000     1.000000   \n",
       "\n",
       "             b3006        b3007        b3008        b3009        b3010  \\\n",
       "count  5191.000000  5191.000000  5191.000000  5191.000000  5191.000000   \n",
       "mean      0.294207     0.105425     0.221045     0.111143     0.103849   \n",
       "std       0.399285     0.284587     0.366523     0.290358     0.274008   \n",
       "min       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "25%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "50%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "75%       0.812500     0.000000     0.692857     0.000000     0.000000   \n",
       "max       1.000000     1.000000     1.000000     1.000000     1.000000   \n",
       "\n",
       "             b3011        b3012        b3013  \n",
       "count  5191.000000  5191.000000  5191.000000  \n",
       "mean      0.086244     0.069944     0.084014  \n",
       "std       0.252326     0.230648     0.256314  \n",
       "min       0.000000     0.000000     0.000000  \n",
       "25%       0.000000     0.000000     0.000000  \n",
       "50%       0.000000     0.000000     0.000000  \n",
       "75%       0.000000     0.000000     0.000000  \n",
       "max       1.000000     1.000000     1.000000  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scaled_ul.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "      <th>col_loc</th>\n",
       "      <th>row_loc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.884058</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>O</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.884058</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>P</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>P</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>P</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>P</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   b3001  b3002  b3003  b3004  b3005     b3006  b3007  b3008  b3009  b3010  \\\n",
       "0    0.0    0.0    0.0    0.0    0.0  0.884058    0.0    0.0    0.0    0.0   \n",
       "1    0.0    0.0    0.0    0.0    0.0  0.884058    0.0    0.0    0.0    0.0   \n",
       "2    0.0    0.0    0.0    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "3    0.0    0.0    0.0    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "4    0.0    0.0    0.0    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "\n",
       "   b3011  b3012  b3013 col_loc  row_loc  \n",
       "0    0.0    0.0    0.0       O        2  \n",
       "1    0.0    0.0    0.0       P        1  \n",
       "2    0.0    0.0    0.0       P        1  \n",
       "3    0.0    0.0    0.0       P        1  \n",
       "4    0.0    0.0    0.0       P        1  "
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Saperate the row and column location letters from the location column\n",
    "#and add it to the scaled dataframe\n",
    "scaled['col_loc'] = (BLE_RSSI['location'].str[0])\n",
    "scaled['row_loc'] = (BLE_RSSI['location'].str[1:]).astype(int)\n",
    "scaled.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#Custom encoders used to encode columns and rows\n",
    "\n",
    "#custom alphabate encoder to encode column location \n",
    "alphabate_encoder = {'A':0,'B':1, 'C':2, 'D':3, 'E':4, 'F':5,\n",
    "           'G':6,'H':7,'I':8,'J':9,'K':10,'L':11,\n",
    "           'M':12,'N':13,'O':14,'P':15,'Q':16,'R':17,\n",
    "           'S':18,'T':19,'U':20,'V':21,'W':22,'X':23,\n",
    "           'Y':24,'Z':25 }\n",
    "\n",
    "#custom number encoder to encode row location \n",
    "number_encoder = {1:0, 2:1, 3:2, 4:3, 5:4, 6:5,\n",
    "           7:6,8:7,9:8,10:9,11:10,12:11,\n",
    "           13:12,14:13,15:14,16:15,17:16,18:17 }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>en_cols</th>\n",
       "      <th>en_rows</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   en_cols  en_rows\n",
       "0       14        1\n",
       "1       15        0\n",
       "2       15        0\n",
       "3       15        0\n",
       "4       15        0"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Encode both rows and column location using custom encoders \n",
    "rows = scaled.shape[0]\n",
    "en_rows = []\n",
    "en_cols = []\n",
    "for i in range(0,rows):\n",
    "    x = (scaled.iat[i, 13])\n",
    "    #Custom encode columns \n",
    "    en_cols.append(alphabate_encoder[x])\n",
    "    y = int(scaled.iat[i, 14])\n",
    "    #Custom encode rows \n",
    "    en_rows.append(number_encoder[y])\n",
    "    \n",
    "#dataframe containing custom encoded colums and rows\n",
    "col_row = pd.DataFrame({'en_cols': en_cols, 'en_rows': en_rows})\n",
    "col_row.to_csv('datasets/col_row.csv', index=False )\n",
    "\n",
    "#dataframe containing custom encoded colums only\n",
    "col_df = pd.DataFrame({'en_cols': en_cols})\n",
    "col_df.to_csv('datasets/encoded_columns.csv', index=False )\n",
    "\n",
    "#dataframe containing custom encoded rows only\n",
    "row_df = pd.DataFrame({'en_rows': en_rows})\n",
    "row_df.to_csv('datasets/encoded_rows.csv', index=False )\n",
    "#scaled.at[0, 'col_loc']\n",
    "#scaled.add(df, axis  = 'columns')\n",
    "\n",
    "#dataframe containing scaled labeled data from thirteen iBeacons only\n",
    "BLE_df = scaled.drop('col_loc',axis =1)\n",
    "BLE_df = BLE_df.drop('row_loc',axis =1)\n",
    "\n",
    "BLE_df.to_csv('datasets/Scaled_BLE_RSSI.csv', index=False )\n",
    "col_row.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABIcAAANbCAYAAADYKv9BAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3X90VPWd//HXJNMESSYmqUHJYvYk\nFVqoTWtIA7YhKquNQlwrYgKxWSl4trJ2MCyW5ARIpICUijlaoiIslW0CQjCtoLXtaYMQftSERoRj\nRG2psoUEiCbWmYGGSeZ+//DLWORHfjC/bub5OMdzmM/c3Hl9Yngzec/nc6/FMAxDAAAAAAAACEsR\nwQ4AAAAAAACA4KE5BAAAAAAAEMZoDgEAAAAAAIQxmkMAAAAAAABhjOYQAAAAAABAGKM5BAAAAAAA\nEMZoDuGiGhsblZeXd964w+HQnDlzlJeXp0mTJmnNmjXe5z744APdd999mjRpkqZOnarDhw97n3vx\nxRc1adIkfec731FFRYXcbvc5533nnXeUnZ3tvwkBGDQCVZ86Ojr0wx/+UHfeeacmTZqkFStWyOPx\n+H+CAEwrUPWpra1NM2fO1L//+78rLy9Pv/rVr/w/OQCmFujf786cOaN7771X69at89+k4DM0h9Bv\nTz31lK6++mq98sorevHFF7Vp0ybt379fkvTII49o2rRpevXVV2W32/Xwww/LMAy99957WrVqlWpq\navTb3/5WDodD69evlyR1d3dr/fr1mjVrllwuVxBnBsDsfF2fHnvsMX3pS1/Syy+/rF/96lc6ePCg\nfvnLXwZxhgDMytf1afHixcrJydG2bdu0fv16LVmyRMePHw/iDAGYla/r01mPPfaY/va3vwVhRhgI\nmkO4pFOnTmnOnDm66667VFRUpPfff18LFixQSUmJJKm9vV1nzpyRzWbTiRMn9Ne//lWTJ0+WJN10\n0006deqU3n77bdXX12vixIlKTExURESECgoKtG3bNknS22+/rXfffVdVVVVBmycA8wlEfbrtttv0\nve99T5IUHR2tkSNHqrW1NTgTBmAagahPzzzzjIqKiiRJra2tslqtio6ODs6EAZhGIOqTJL300kty\nOBy6+eabgzFNDADNIVxSW1ubZsyYoa1btyovL0/z58+XxWKR1WrVI488ory8PGVlZSk1NVVtbW0a\n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\nss6ePWsNDw9bFRUV1qFDhxyV8ZzHH3/cWrRokbV169ZEx7Msa/SMg4OD1h133GG9++67lmVZ1jPP\nPBP9t5Ny/v73v7duvvlm6/Tp09bvfvc765Of/GRSMlrWH35HCxYssO65554Ry8+cOWN95jOfsX73\nu99Zp0+fthYuXGidOHEiSSnNRT8lJuM5ye4nyzKjo+gnWBb9lKiM59BPl5+RfnIXEzqKfrIP/WSf\nePaT468c2rdvn+bNmydJuuGGG/SrX/0q+trBgwd14403asqUKfL5fMrNzdVbb73luJzXXHONvvOd\n7yg1NVUpKSk6e/aspk6d6qiMkvTjH/9YHo9HZWVlCc92zmgZ9+/fr5kzZ2r9+vWqrKzUBz/4QWVl\nZTku5wc+8AHl5OTo1KlTOnXqlDweT1IySlJubq42btx4wfLDhw8rNzdXV111laZMmaI5c+boF7/4\nRRISmo1+SkxGyRn9JJnRUfQTJPopURkl+smujPSTu5jQUfSTfegn+8Szn7x2hYyXUCik9PT06Nep\nqak6e/asvF6vQqGQfD5f9LW0tDSFQqFkxBw15xVXXKGsrCxZlqV/+qd/0qxZs5SXl+eojG+//bZ+\n9KMf6Z//+Z/1rW99K+HZxpNxYGBAnZ2d+sEPfqBp06bp85//vG644QbH/S4l6dprr9Udd9yh4eFh\nffGLX0x4vnPKy8t19OjRC5Y76X87JqOfEpPRKf0kmdFR9BMk+ilRGekn+zJK9JObmNBR9JN96Cf7\nxLOfHD8cSk9PVzgcjn4diUSi/4HOfy0cDo/4hSTSaDkl6fTp06qvr1daWpoaGhqSEXHUjD/4wQ/0\nzjvv6N5779WxY8d0xRVX6E//9E8TPmUeLWNmZqb+4i/+QtnZ2ZKkoqIiHTp0KClFPFrO9vZ2nThx\nQm1tbZKk5cuXq7CwUAUFBQnPeSlO+t+Oyegn+5jQT2PldEpH0U+Q6Cc70U+JyUg/uYsJHUU/JSYn\n/WQPO/534/jbygoLC9Xe3i5JeuONNzRz5szoawUFBdq3b59Onz6twcFBHT58eMTrTslpWZb+4R/+\nQR/96Ef1//7f/1NqaqrjMtbU1Ki1tVVNTU266667tGzZsqQUx2gZZ8+erbffflv9/f06e/asDhw4\noI985CMJzzhWzquuukpXXnmlpkyZoqlTp8rn8+m9995LSs5L+fCHP6wjR47od7/7nc6cOaNf/OIX\nuvHGG5Mdyzj0U2IyOqWfxsrplI6inyDRT4nKSD/Zl5F+chcTOop+SkxO+skedvST468cmj9/vjo6\nOrRkyRJZlqVvfvOb+u53v6vc3Fx9+tOfVlVVlSorK2VZllatWpWUez3HyhmJRNTV1aUzZ87otdde\nkyR95StfSfj/mYz1u3SCsTI++OCD+sIXviBJuvXWW5P2ZnasnHv37tXixYuVkpKiwsJCfeITn0hK\nzvO9/PLLOnnypCoqKlRXV6fly5fLsizdfffd+tCHPpTseMahnxKT0Sn9JJnRUfQTJPopURnpJ3sz\n0k/uYUJH0U/2oZ/ix85+8lhWkj4LHAAAAAAAAEnn+NvKAAAAAAAAED8MhwAAAAAAAFyM4RAAAAAA\nAICLMRwCAAAAAABwMYZDAAAAAAAALsZwCAAAAAAAwMUYDgEAAAAAALgYwyEAAAAAAAAXYzgEAAAA\nAADgYgyHAAAAAAAAXIzhEAAAAAAAgIsxHAIAAAAAAHAxhkMAAAAAAAAuxnAIAAAAAADAxRgOAQAA\nAAAAuBjDIQAAAAAAABdjOAQAAAAAAOBiDIcAAAAAAABcjOEQAAAAAACAizEcAgAAAAAAcDGGQwAA\nAAAAAC7GcAiX1NnZqQULFlywfHBwUA888IAWLFig22+/Xc8880z0tf/+7//W5z//ed1+++1atGiR\nDh8+HH3t+9//vm6//XZ99rOfVUNDg4aGhiRJR48e1fLly3Xbbbfp7rvv1iuvvBL/nQNgNLv7SZLO\nnDmj++67Tz/+8Y+jy06dOqUHH3xQt912m8rLy/XTn/40fjsFYFJIVD+d89Zbb6m0tNT+HQEw6SSq\nn/r7+/XlL39Zd955p26//XatX79ekUgkfjsGWzAcwoQ9+eST+tCHPqQf/ehH+v73v69t27Zp//79\nkqSvfvWrWrJkiV555RX5/X794z/+oyzL0ttvv62NGzequblZP/7xjzU4OKjnn39eklRXV6cbbrhB\nr776qv7lX/5F3/nOd/TWW28lcQ8BmCqWfpKk/fv3q6KiQr/85S9HbG/jxo2aNm2aXn31VX33u9/V\n2rVr1dvbm/D9AmA+u/vp7Nmzev7557V8+XKFw+GE7w+AycPufvrmN7+pD3/4w3r55Zf1r//6rzp4\n8KBefPHFhO8XJobhEEZ18uRJPfDAA/rc5z6nqqoq/eY3v9FDDz2k2tpaSVJfX5/OnDkjn8+nd955\nR//1X/+lO+64Q5J088036+TJk3rzzTfV1tamT33qU8rKylJKSooqKir00ksvSZK6u7t11113SZLS\n09NVUlKin/zkJ8nZYQDGsKufJKmpqUkPPvigCgoKRvyMn/70p7rnnnskSTk5OfrEJz6hV199NYF7\nCcBEieinN998EHMy6QAAIABJREFUU7/+9a/V2NiY2J0DYLRE9NP8+fP1t3/7t5KkqVOnasaMGTp+\n/HgC9xKxYDiEUfX09GjZsmX64Q9/qAULFqimpkYej0der1df/epXtWDBAhUXFysvL089PT26+uqr\nlZLyxz+rD33oQ+rt7VVPT4+uvfba6PJrrrlG77zzjiSpoKBAL774oizLUn9/v9rb29XX15fwfQVg\nFrv6SZKCweBFb8s4v7ve/z0AcCmJ6KeCggKtW7dO2dnZCdsvAOZLRD+Vl5dHu+nNN9/Uj370I82f\nPz8xO4iYMRzCqD760Y+qsLBQknTXXXfpV7/6lQYHByVJjz32mP7jP/5Dv//97/Wtb31LkUhEHo9n\nxPdblqXU1NTopYfvX36uZNavX6/Dhw/rr//6r1VfX69PfvKTuuKKKxKwdwBMZlc/jcayrAu+7/1v\nkADgYhLRTwAQi0T202uvvab7779fq1ev1vXXX2/vjsB2vMPFqM4/CPJ4POrs7Ixe9ZOWlqY77rhD\nb775pnJyctTX1zdiEHTixAldc801uvbaa3XixIkLlkvS//3f/2ndunV6+eWXtWnTJr333nvKzc1N\nwN4BMJld/TSa0boLAC4lEf0EALFIVD9997vfVU1NjYLBoP7mb/7G3p1AXDAcwqh+/etf69ChQ5Kk\n7du3a86cOdq5c6e+9a1vybIsnTlzRq+++qrmzp2ra665Rrm5udFPG3vttdeUkpKimTNn6lOf+pR2\n7typd999V5Zlafv27frMZz4j6Q8PfH3hhRckSb/5zW+0c+dOffazn03ODgMwhl39NJpPf/rT2r59\nuySpt7dXr732mm655Zb47hgA4yWinwAgFonopy1btmjLli1qaWnRX/3VX8V9n2APb7IDwNny8/PV\n2Nio//3f/9Wf/Mmf6NFHH5XP51NDQ4PuvPNOSdJnPvMZ/d3f/Z2kP9x3umbNGn3729/WlClT9OST\nTyolJUUf+9jHtHLlSt17770aGhrSX/7lX+rv//7vJUk1NTX62te+ph/84AdKTU3Vo48+OuIZHwBw\n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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11a4201d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Visulization of distribution of data points across different iBeacon values\n",
    "BLE_df.hist(figsize=(20,15))# Plotting all the beacons values \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ndhUNuzuAYBLH6oCNHdEQS3cYHRGaRENVYnQCCmQkllRrpj4QBVESQCrykIad2KgU4kQdEquDNq2/\nNkVTxUFA14nVpq7Rxie0Qe1SjLJrFGHP7w8n2xCeFthlF87r9d8997vnvO/dk4/DO+ecXbEiixYt\nSpJcdNFF7e+9/PLLOf/88zN16tScd955qa2tTZIcffTRmT9//n7J89BDD+Xb3/52PvnJTyZJrrji\nitTX13frd/T444/nu9/9bqqrq3PEEUdk4cKFOfzww3PZZZfl17/+dQ455JD07t07t99++37L1BPO\npaVLl+axxx5Lkrz77rvZsGFD1qxZkzvuuCP33Xdf+vfvnySZM2dOBg8e3GU52DPm075lMqM6lqkn\nnE+JOXWgMZ/2LVN3zyezqWPMpQOT+bT3ecym3WfqCefRATmbigPAzTffXNxxxx1FURTFSy+9VJx3\n3nlFURTFueeeW6xbt65oa2sr/uIv/qJ49tlniwcffLCYPn16URRF8fTTTxeXXXZZl+W68cYbi9Gj\nRxdTpkzZ7r3XXnutOP/884uWlpbi/fffL770pS91WY5d5WloaChWrFixzbru/o6+8IUvFM3NzUVR\nFMV3vvOd4q677iqKoijOOuusoq2trcuy7CpTd59Lv+/SSy8tVq1aVRRFUVxzzTXFf/7nf+63Y7Nn\nzKd9y2RGdSxTd59PO2JO9Xzm075l6s75ZDbtHXPpwGE+7X0es2n3mbr7PPp9B8psOiBuK7v44osz\nfvz4JMnWrVvTu3fvtLS0ZPPmzTnmmGNSqVQyYsSIPP7443nqqady+umnJ0lOPvnkPPvss12Wa9iw\nYbnhhht2+N5NN92UadOmpU+fPnn++efzm9/8JpMnT86kSZPyzDPP7Lc8TU1Nuf/++zNx4sQsWLAg\nW7Zs6fbvaNmyZRkwYECSZMuWLendu3c2bNiQd999N5dddlkmTJiQlStX7rdMPeFc+l0PPfRQ6urq\n2o/d1NSUpUuXZsKECVmyZMl+yUDHmU/7lsmM2n2mnnA+/T5z6sBgPu1bpu6cT2bTnjOXDizm097n\nMZt2naknnEe/60CaTT3utrLly5fnrrvu2mbbvHnzMnTo0DQ3N2fatGmZMWNGWlpaUlNT076mT58+\nef3117fbXlVVlS1btqS6eu8/6s4ynX322WlsbNxu/fPPP5/W1taceuqpSZLDDjssX/va1zJu3Li8\n+uqrueSSS7JixYq9zrQneU477bScccYZOfroozN79uzcc8893f4dHXnkkUk+uvyvsbExU6ZMycaN\nG9uH6zvvvJMJEyZk6NChOeKII7o80/48l3aXbejQoVmyZEkaGhrat59zzjmZOHFiampqcvnll2fl\nypX57Gc/u88Z2HPmU+dnMqN65ozaVT5zqmcynzo/0/6YT2ZT52Qzl3o286lz85hNu85kNu29HlcO\njRs3LuPGjdtu+wsvvJCrr7461157bYYPH56Wlpa0tra2v9/a2pq6urq8//7722xva2vb51/4zjLt\nzAMPPLDN+kGDBuXYY49NpVLJoEGD0rdv3zQ3N7ffJ9qVeb785S+nrq4uSfL5z38+Dz74YGpra7v9\nO7rzzjuzYsWK3H777endu3cGDBiQ8ePHt9+resIJJ+SVV17ZpwHS0Uw1NTX77VzaXbYXX3wxdXV1\n7fe/FkWRr371q+33M48aNSrPPfdcjxkgZWM+dX4mM6pnzqhd5TOneibzqfMz7Y/5ZDZ1TjZzqWcz\nnzo3j9m0a2bT3jsgbit78cUXc9VVV2XRokUZNWpUko9+6Yccckhee+21FEWR1atXp76+PsOGDcuq\nVauSfPQgquOPP36/533iiSfaLxtLkvvuuy8LFixIkrz11ltpaWnJwIEDuzxHURQ599xz8+abbyb5\n6GFhJ554Yrd/R4sXL87Pfvaz3Hnnne0P4lq7dm2mTJmS5KP/Af/yl7/cbw/m6knn0tq1azNy5Mj2\n1y0tLRkzZkxaW1tTFEUaGxtz0kkndXkOOs582ntmVMf0tPPJnDpwmE97ryfOJ7Np58ylA4/5tHfM\npt3rSefRgTabetyVQzuyaNGibN68OTfddFOSj37hixcvzpw5czJ16tRs3bo1I0aMyGc+85l8+tOf\nzpo1azJ+/PgURZF58+bt97zNzc3p169f++uxY8fm+uuvz4QJE1KpVDJv3rxO/X93d6ZSqWTu3Lm5\n/PLLc9hhh+W4447LBRdckKqqqm77jjZs2JBbb701Q4YMySWXXJIkOeusszJx4sSsXr06F1xwQXr1\n6pWrr766fbjsDz3lXHrllVdy2mmntb+ura3NN77xjUyaNCmHHnpoTj311Pb/gNIzmE97z4zquJ50\nPplTBw7zae/1tPlkNu2auXTgMZ/2jtnUMT3lPDrQZlOlKIqiu0MAAAAA0D0OiNvKAAAAAOgayiEA\nAACAElMOAQAAAJSYcggAAACgxJRDAAAAACWmHAIAAAAoMeUQAAAAQIkphwAAAABKTDkEAAAAUGLK\nIQAAAIASUw4BAAAAlJhyCAAAAKDElEMAAAAAJaYcAgAAACgx5RAAAABAiSmHAAAAAEpMOQQAAABQ\nYsohAABE5pX0AAAXGElEQVQAgBJTDgEAAACUmHIIAAAAoMSUQwAAAAAlphxihxobGzNmzJjttm/a\ntClXXnllxowZk7PPPjtLly5tf+/VV1/NV77ylZx99tkZO3ZsXnrppW1+dvPmzfnzP//zrFixon3b\nG2+8kcmTJ+fcc8/NmDFj8uMf/7jrPhQAAACwHeUQe+Tmm2/Oxz/+8fzzP/9z7rvvvtxzzz15+umn\nkyRTp07N+PHj85Of/CRXXHFFrrrqqhRFkSR5+umnc+GFF+bf//3ft9nfnDlzMnLkyDzwwAO58847\nc+ONN+bNN9/c758LAAAAyqq6uwPQc7333nu58sors27dutTV1eWv//qv881vfjNbt25NkjQ3N2fz\n5s2pra3NW2+9lZdffjnnnHNOkmTUqFGZM2dOnnvuuZx44olZtmxZrrnmmixZsmSbY9x2223tBdL6\n9etTXV2d3r17798PCgAAACXmyiF26o033sjFF1+cf/qnf8qYMWNy7bXXplKppLq6OlOnTs2YMWMy\nfPjwDBo0KG+88UaOPPLI9Or1f6fUxz/+8fargBoaGjJixIjtjtGrV69UVVXloosuyvjx4zN27Nj0\n69dvv31GAAAAKDvlEDv1R3/0Rxk2bFiS5Pzzz8+zzz6bTZs2JUm+853v5Iknnsg777yTW2+9NW1t\nbalUKtv8fFEUqaqq6tCxli1bltWrV2fNmjW5//77O/eDAAAAADulHGKnfvcqoCSpVCppbGzMW2+9\nlSTp06dPzjnnnDz33HM56qij0tzc3H6LWJL8z//8Tz7xiU/s8hgrVqxIS0tLkqR///4544wz8txz\nz3XyJwEAAAB2RjnETr3wwgv5xS9+kSS599578yd/8id55JFHcuutt6YoimzevDn/+q//mlNOOSWf\n+MQncswxx+QnP/lJkuSxxx5Lr169cvzxx+/yGH//93+fH/7wh0k++ktoDz/8cE455ZSu/WAAAABA\nOw+kZqcGDx6cW265Ja+//nqOOOKILFiwILW1tZk9e3a++MUvJknOOOOMTJo0KclHzxWaOXNmFi9e\n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\nS5J8/vOfz4MPPpja2tpu/57uvPPOrFixIrfffnt69+6dAQMGZPz48e3PITrhhBPyyiuv7FM51NFM\nNTU1++186ki+F198MXV1de3PNyqKIl/96lfbn1s1atSoPPfcc8ohAAAA9tkBcVvZiy++mKuuuiqL\nFi3KqFGjknz0j/lDDjkkr732WoqiyOrVq1NfX59hw4Zl1apVST56wPDxxx+/3/M+8cQT7bcCJcl9\n992XBQsWJEneeuuttLS0ZODAgfslS1EUOffcc/Pmm28m+ehB0CeeeGK3f0+LFy/Oz372s9x5553t\nD1heu3ZtpkyZkuSjcuaXv/zlfnvgck87n9auXZuRI0e2v25pacmYMWPS2tqaoijS2Njo2UMAAAB0\nih535dCOLFq0KJs3b85NN92U5KN/yC9evDhz5szJ1KlTs3Xr1owYMSKf+cxn8ulPfzpr1qzJ+PHj\nUxRF5s2bt9/zNjc3p1+/fu2vx44dm+uvvz4TJkxIpVLJvHnzOvXqk12pVCqZO3duLr/88hx22GE5\n7rjjcsEFF6SqqqrbvqcNGzbk1ltvzZAhQ3LJJZckSc4666xMnDgxq1evzgUXXJBevXrl6quvbi+O\n9oeedD698sorOe2009pf19bW5hvf+EYmTZqUQw89NKeeemp7UQoAAAD7olIURdHdIQAAAADoHgfE\nbWUAAAAAdA3lEAAAAECJKYcAAAAASkw5BAAAAFBiyiEAAACAElMOAQAAAJSYcggAAACgxP4/u/ZP\nAO/2nHwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1440x1080 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Visulization of distribution of data points across different iBeacon values\n",
    "BLE_RSSI_UL.hist(figsize=(20,15))# Plotting all the beacons values \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlQAAAHfCAYAAACWB0avAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3X9Q1Hd+x/HXsmtOgaVA4VJpooEk\nV6MO7XBULw1S6y+SzHk5UxIUh6vBay833lruogeusCYlipQePaPReDamHUlKQrgm3jQzHY9IOJRi\nxzYxkh/X3ljvFJpooCdsPIX9fvvHNXtRI6CfXb4rPB9/Zb8s3+/7426+Pv3usrhs27YFAACA6xbn\n9AAAAAA3OoIKAADAEEEFAABgiKACAAAwRFABAAAYIqgAAAAMEVQAAACGCCrElIqKCj377LNOjwEA\nwDUhqAAAAAx5nB4Asef111/Xrl27NDg4qMmTJ6u8vFzt7e06ffq0zpw5o9OnT+vmm29WXV2dPv/5\nzw+7r5dfflnPPfec4uLilJKSotraWk2dOlUvvvii9u3bp7i4OKWlpamqqkqZmZmXfO9TTz2lAwcO\naNKkSUpJSVFNTc2IxwOAkUTqHNfZ2anNmzcrPj5ewWBQzc3N+qd/+qcrzm2/+tWv9Oijj+qNN96Q\nJK1evVppaWmqra3VxYsXNW/ePP34xz/Wc889xznvRmYDn3LixAn7y1/+st3b22vbtm3/9Kc/te+5\n5x5769at9sKFC+3+/n7btm37G9/4hr1t27Zh9/Xuu+/ac+fOtbu7u23btu3nnnvOrqqqsg8fPmwv\nWrTI/uijj2zbtu3m5mb7vvvusy3LssvLy+2/+7u/s7u7u+2cnBz7woULtm3b9rPPPmsfOHAgWssG\nMEFE8hz3r//6r/aMGTPsU6dO2bZtD3tuW7Bggf3+++/b58+ft+fPn2/n5+fbtm3bra2t9te//nXO\neeMAV6hwiUOHDunDDz/UqlWrwttcLpd+/vOfa86cOUpMTJQkzZw5U7/85S+H3VdHR4fy8vI0depU\nSQrv86//+q91//33KzU1VZL04IMPavPmzTp16lT4e2+++WbNmDFDy5YtU35+vvLz83X33XdHcKUA\nJqJInuMkaerUqfrd3/1dSdJPfvKTq57bFi9erLa2Nt1555360pe+pPfff1//+Z//qZaWFi1ZsoRz\n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\nu9TY2Kg9e/ZE7QLH5ceWfh10L7/8skzfUj6hr1C99957On/+vEpLS/W1r31Nb775ptMjRdS0adMu\n+R+zq6tLc+bMkSTl5+fr8OHDTo0WUZev8/jx42ptbdXKlSvl9/s1MDDg4HSRce+99+ov//Ivw7fd\nbve4fTwnKic/ff2znl9jrba2VsuXL9fnP//5MT1ue3u7vvCFL2jNmjV69NFHNX/+/DE9fmZmpkKh\nkCzL0sDAwJh8npnTfzdcfvz6+nrdddddkqRQKKTPfe5zY3bsvr4+/c3f/I38fr/xvid0UE2ePFmr\nV6/Ws88+qyeeeELr1q3T0NCQ02NFTEFBwSX/c9q2LZfLJUlKSEhQf3+/U6NF1OXrzM7O1ne/+109\n//zzuvXWW/X00087OF1kJCQkKDExUQMDA1q7dq3KysrG7eM5UV3t09fHwmc9v8bSD3/4Q6WmpoaD\nciz19fXp+PHj2rZtW/jvgbH84ff4+HidPn1a9913n6qqqq54KSoanP674fLjfxLR//7v/66Ghgat\nWrVqTI4dCoW0ceNG+f1+JSQkGO97QgdVZmamvvKVr8jlcikzM1PJyck6c+aM02NFTVzcbx7uYDCo\npKQkB6eJnsWLF2v27Nnh/37nnXccnigyenp69LWvfU0PPPCAli5dOmEez4nC6U9fv/z5NZaam5t1\n+PBhlZSU6N1331V5efmYnYuTk5OVl5enm266SVlZWfrc5z6n3t7eMTm2JP393/+98vLy9C//8i96\n9dVXVVFREX47yliJhXPJa6+9pk2bNukHP/iBUlNTx+SYXV1dOnnypB5//HF95zvf0X/9139p8+bN\n172/CR1UL7/8cvi3xH/wwQcaGBhQenq6w1NFz8yZM9XZ2SlJamtrU25ursMTRcfq1at17NgxSVJH\nR4dmzZrl8ETmzp49q9LSUq1fv16FhYWSJs7jOVE4+enrn/X8GkvPP/+8GhoatG/fPt11112qra0d\ns3PxF7/4Rf3kJz+Rbdv64IMPdP78eSUnJ4/JsSUpKSlJXu+vf4/cb/3Wb2loaEihUGjMji85fy55\n9dVXw4//rbfeOmbHzc7O1j//8z9r3759qq+v1x133KGNGzde9/4m9JvSCwsLtWHDBq1YsUIul0tb\ntmwZ17+Pq7y8XFVVVaqvr1dWVpYKCgqcHikqHn/8cVVXV2vSpElKS0tTdXW10yMZe+aZZ3Tu3Dnt\n3LlTO3fulCRt3LhRTz755Lh/PCeKxYsX69ChQ1q+fHn409fHymc9v/bs2TPmbxB3wp/8yZ/o3/7t\n31RYWCjbthUIBMb0PWSrVq2S3+9XcXGxBgcH9e1vf1vx8fFjdnzJ2b8bQqGQNm/erKlTp8rn80mS\n/vAP/1Br164dsxkihU9KBwAAMDShX/IDAACIBIIKAADAEEEFAABgiKACAAAwRFABAAAYIqgAAAAM\nEVQAAACGCCoAAABD/wfCdrD/8Wfg8wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1a77fa20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Visulization of distribution of data points across rows and columns\n",
    "col_row.hist(figsize=(10,8))# Plotting row column data points information\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.array([en_cols[0],en_rows[0]])\n",
    "\n",
    "#array containing the location of iBeacon devices\n",
    "b_loc = np.zeros((13,2))\n",
    "\n",
    "# Approx. hard coded iBeacon locations\n",
    "b_loc[0]= y_1 = np.array([5,8])\n",
    "b_loc[1]= y_2 = np.array([9,3])\n",
    "b_loc[2]= y_3 = np.array([13,3])\n",
    "b_loc[3]= y_4 = np.array([18,3])\n",
    "b_loc[4]= y_5 = np.array([9,6])\n",
    "b_loc[5]= y_6 = np.array([13,6])\n",
    "b_loc[6]= y_7 = np.array([18,6])\n",
    "b_loc[7]= y_8 = np.array([9,9])\n",
    "b_loc[8]= y_9 = np.array([3,14])\n",
    "b_loc[9]= y_10 = np.array([9,14])\n",
    "b_loc[10]= y_11 = np.array([13,14])\n",
    "b_loc[11]= y_12 = np.array([18,14])\n",
    "b_loc[12]= y_13 = np.array([22,14])\n",
    "np.save('grids/iBeacon_locations_col_row.npy', b_loc) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>en_cols</th>\n",
       "      <th>en_rows</th>\n",
       "      <th>dis_1</th>\n",
       "      <th>dis_2</th>\n",
       "      <th>dis_3</th>\n",
       "      <th>dis_4</th>\n",
       "      <th>dis_5</th>\n",
       "      <th>dis_6</th>\n",
       "      <th>dis_7</th>\n",
       "      <th>dis_8</th>\n",
       "      <th>dis_9</th>\n",
       "      <th>dis_10</th>\n",
       "      <th>dis_11</th>\n",
       "      <th>dis_12</th>\n",
       "      <th>dis_13</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14</td>\n",
       "      <td>1</td>\n",
       "      <td>34.205263</td>\n",
       "      <td>16.155494</td>\n",
       "      <td>6.708204</td>\n",
       "      <td>13.416408</td>\n",
       "      <td>21.213203</td>\n",
       "      <td>15.297059</td>\n",
       "      <td>19.209373</td>\n",
       "      <td>28.301943</td>\n",
       "      <td>51.088159</td>\n",
       "      <td>41.785165</td>\n",
       "      <td>39.115214</td>\n",
       "      <td>40.804412</td>\n",
       "      <td>45.793013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>38.418745</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>38.418745</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>38.418745</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>38.418745</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   en_cols  en_rows      dis_1      dis_2      dis_3      dis_4      dis_5  \\\n",
       "0       14        1  34.205263  16.155494   6.708204  13.416408  21.213203   \n",
       "1       15        0  38.418745  20.124612  10.816654  12.727922  25.455844   \n",
       "2       15        0  38.418745  20.124612  10.816654  12.727922  25.455844   \n",
       "3       15        0  38.418745  20.124612  10.816654  12.727922  25.455844   \n",
       "4       15        0  38.418745  20.124612  10.816654  12.727922  25.455844   \n",
       "\n",
       "       dis_6      dis_7      dis_8      dis_9     dis_10     dis_11  \\\n",
       "0  15.297059  19.209373  28.301943  51.088159  41.785165  39.115214   \n",
       "1  18.973666  20.124612  32.449961  55.317267  45.694639  42.426407   \n",
       "2  18.973666  20.124612  32.449961  55.317267  45.694639  42.426407   \n",
       "3  18.973666  20.124612  32.449961  55.317267  45.694639  42.426407   \n",
       "4  18.973666  20.124612  32.449961  55.317267  45.694639  42.426407   \n",
       "\n",
       "      dis_12     dis_13  \n",
       "0  40.804412  45.793013  \n",
       "1  42.953463  46.957428  \n",
       "2  42.953463  46.957428  \n",
       "3  42.953463  46.957428  \n",
       "4  42.953463  46.957428  "
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#datafram containing the distance of each iBeacon device from the encoded location of the datapoints in labeled data\n",
    "col_row_dis = DataFrame()\n",
    "col_row_dis = col_row.copy()\n",
    "dis_ph = []\n",
    "col_nms = ['dis_' + str(i) for i in range(1, 14)]\n",
    "dis_df = DataFrame( )\n",
    "\n",
    "for j in range(0,13):\n",
    "    for i in range(0,1420):\n",
    "        #Distace is multiplied by three due to the fact that each grid cell is approx. 3m by 3m\n",
    "        dis_ph.append(3 * distance.euclidean(np.array([en_cols[i],en_rows[i]]), b_loc[j]))\n",
    "    col_row_dis['dis_' + str(j+1)] = pd.DataFrame({ col_nms[j]: dis_ph})\n",
    "    dis_ph.clear()\n",
    "col_row_dis.to_csv('datasets/col_row_dis.csv', index=False )\n",
    "col_row_dis.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>dis_1</th>\n",
       "      <th>dis_2</th>\n",
       "      <th>dis_3</th>\n",
       "      <th>dis_4</th>\n",
       "      <th>dis_5</th>\n",
       "      <th>dis_6</th>\n",
       "      <th>dis_7</th>\n",
       "      <th>dis_8</th>\n",
       "      <th>dis_9</th>\n",
       "      <th>dis_10</th>\n",
       "      <th>dis_11</th>\n",
       "      <th>dis_12</th>\n",
       "      <th>dis_13</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>34.205263</td>\n",
       "      <td>16.155494</td>\n",
       "      <td>6.708204</td>\n",
       "      <td>13.416408</td>\n",
       "      <td>21.213203</td>\n",
       "      <td>15.297059</td>\n",
       "      <td>19.209373</td>\n",
       "      <td>28.301943</td>\n",
       "      <td>51.088159</td>\n",
       "      <td>41.785165</td>\n",
       "      <td>39.115214</td>\n",
       "      <td>40.804412</td>\n",
       "      <td>45.793013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>38.418745</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>38.418745</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>38.418745</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>38.418745</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       dis_1      dis_2      dis_3      dis_4      dis_5      dis_6  \\\n",
       "0  34.205263  16.155494   6.708204  13.416408  21.213203  15.297059   \n",
       "1  38.418745  20.124612  10.816654  12.727922  25.455844  18.973666   \n",
       "2  38.418745  20.124612  10.816654  12.727922  25.455844  18.973666   \n",
       "3  38.418745  20.124612  10.816654  12.727922  25.455844  18.973666   \n",
       "4  38.418745  20.124612  10.816654  12.727922  25.455844  18.973666   \n",
       "\n",
       "       dis_7      dis_8      dis_9     dis_10     dis_11     dis_12     dis_13  \n",
       "0  19.209373  28.301943  51.088159  41.785165  39.115214  40.804412  45.793013  \n",
       "1  20.124612  32.449961  55.317267  45.694639  42.426407  42.953463  46.957428  \n",
       "2  20.124612  32.449961  55.317267  45.694639  42.426407  42.953463  46.957428  \n",
       "3  20.124612  32.449961  55.317267  45.694639  42.426407  42.953463  46.957428  \n",
       "4  20.124612  32.449961  55.317267  45.694639  42.426407  42.953463  46.957428  "
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#dataset containing only the distace from each iBeacon to the location of the datapoint\n",
    "for j in range(0,13):\n",
    "    for i in range(0,1420):\n",
    "        #Distace is multiplier by three due to the fact that each grid cell is approx. 3m by 3m\n",
    "        dis_ph.append(3 * distance.euclidean(np.array([en_cols[i],en_rows[i]]), b_loc[j]))\n",
    "    dis_df['dis_' + str(j+1)] = pd.DataFrame({ col_nms[j]: dis_ph})\n",
    "    dis_ph.clear()\n",
    "\n",
    "dis_df.to_csv('datasets/iBeacon_Distance.csv', index=False )\n",
    "dis_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n//10dnbm0ksvzYsvvpj+/v5MmTIlpVIpHR0d2bJlS01rHM3quT8Npp7712Aaob8NphH632DqqT/W\ndRDU29ublpaWgcdNTU3Zv39/DSv6ZHPnzk1z8//stKtUKimVSkmS8ePHp6enp1alfazx48enpaUl\nvb29ueqELs1wAAAaLklEQVSqq7J48eK6r/lDzc3NueGGG7Jy5crMnTu37ut+7LHHMmnSpIH/9JL6\n//mgsTVaPxqORu5hw9FofW849Mrqqeffn+q5PzVKX6nnftAI7+MjjzwyixYtyo9+9KPceuutWbp0\naY466qiB4/VQ42hWz/1pMPXcvwbTKP1tMPXc/wZTb/2xroOglpaW9PX1DTwul8sfefPVs/+9t6+v\nry8TJkyoYTUfb9euXbn00ktzzjnnZN68eQ1R84fWrl2bn/3sZ7n55psHlmcm9Vn3+vXr8/zzz2fh\nwoX51a9+lRtuuCF79uwZOF6PNTO6NNJ7+9No5B42HI3U94ZDr6yeRvr9qd7et43SV+q1HzTC+3ja\ntGn58pe/nFKplGnTpqW1tTXvvPPOwPF6qHE0a6T+NJh67Q+fpFH622Dqtf8Npt76Y10HQTNnzsym\nTZuSJNu3b88JJ5xQ44qG7qSTTsrWrVuTJJs2bUp7e3uNK/qot99+O52dnbnuuusyf/78JPVfc5I8\n/vjjueeee5IkRx11VEqlUk455ZS6rvuBBx7I/fffn3Xr1uVzn/tc1q5dmzlz5tR1zYwujfDe/rQa\ntYcNRyP2veHQK6unkX5/qqf3bSP0lXrvB43wPn700UcH7kvz1ltv5f3338+4cePym9/8JpVKJZs3\nb655jaNZI/WnwdRbfziYRuhvg6n3/jeYeuuPpUqlUjlsV/uUPryr/GuvvZZKpZJVq1ZlxowZtS7r\nE73xxhv5u7/7u/zkJz/J66+/nptvvjn79u3L9OnT09XVlaamplqXOKCrqytPPfVUpk+fPvDcjTfe\nmK6urrqtOUnee++9LF26NG+//Xb279+fr3/965kxY0Zdf6//t4ULF+aWW27JmDFjGqZmGlMj9aPh\naNQeNhyN3veGQ688NPX++1O99qdG6CuN1A/q9X3c39+fpUuXZufOnSmVSrn22mszZsyYrFq1KgcO\nHEhHR0e+9a1v1ay+0a7e+9Ng6rV/DaYR+ttgGqn/DaYe+mNdB0EAAAAAVE9dbw0DAAAAoHoEQQAA\n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\neSfJ3r17s2PHjnzve9/LrbfemmuvvbYwcwcAAODwq+sgqKWlJX19fQOPy+Vympvr+rZGh2zXrl25\n9NJLc84552TevHkfuTdMX19fJkyYUMPqRsb69evz/PPPZ+HChfnVr36VG264IXv27Bk4PlrnnSQT\nJ05MR0dHxo4dm+nTp+czn/nMR4Kf0Tx3AAAADr+6DoJmzpyZTZs2JUm2b9+eE044ocYVjay33347\nnZ2due666zJ//vwkyUknnZStW7cmSTZt2pT29vZaljgiHnjggdx///1Zt25dPve5z2Xt2rWZM2fO\nqJ93kvzJn/xJ/u3f/i2VSiVvvfVW3n///Xz+858vxNwBAAA4/EqVSqVS6yI+yYefGvbaa6+lUqlk\n1apVmTFjRq3LGjFdXV156qmnMn369IHnbrzxxnR1dWXfvn2ZPn16urq60tTUVMMqR9bChQtzyy23\nZMyYMbn55psLMe+///u/z9atW1OpVPKtb30rxx57bGHmDgAAwOFV10EQAAAAANVT11vDAAAAAKge\nQRAAAABAQQiCAAAAAApCEAQAAABQEIIgAAAAgIIQBAEAAAAUhCAIAAAAoCD+H15c5n4fe2H1AAAA\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a17149ef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Visulization of distribution of data points in the distance dataframe\n",
    "dis_df.hist(figsize=(20,15))# Plotting row column data points information\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>...</th>\n",
       "      <th>dis_4</th>\n",
       "      <th>dis_5</th>\n",
       "      <th>dis_6</th>\n",
       "      <th>dis_7</th>\n",
       "      <th>dis_8</th>\n",
       "      <th>dis_9</th>\n",
       "      <th>dis_10</th>\n",
       "      <th>dis_11</th>\n",
       "      <th>dis_12</th>\n",
       "      <th>dis_13</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.884058</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>13.416408</td>\n",
       "      <td>21.213203</td>\n",
       "      <td>15.297059</td>\n",
       "      <td>19.209373</td>\n",
       "      <td>28.301943</td>\n",
       "      <td>51.088159</td>\n",
       "      <td>41.785165</td>\n",
       "      <td>39.115214</td>\n",
       "      <td>40.804412</td>\n",
       "      <td>45.793013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.884058</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.819444</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>25.455844</td>\n",
       "      <td>18.973666</td>\n",
       "      <td>20.124612</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>45.694639</td>\n",
       "      <td>42.426407</td>\n",
       "      <td>42.953463</td>\n",
       "      <td>46.957428</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>6 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   b3001  b3002     b3003  b3004  b3005     b3006  b3007  b3008  b3009  b3010  \\\n",
       "0    0.0    0.0  0.000000    0.0    0.0  0.884058    0.0    0.0    0.0    0.0   \n",
       "1    0.0    0.0  0.000000    0.0    0.0  0.884058    0.0    0.0    0.0    0.0   \n",
       "2    0.0    0.0  0.000000    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "3    0.0    0.0  0.000000    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "4    0.0    0.0  0.000000    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "5    0.0    0.0  0.819444    0.0    0.0  0.000000    0.0    0.0    0.0    0.0   \n",
       "\n",
       "     ...          dis_4      dis_5      dis_6      dis_7      dis_8  \\\n",
       "0    ...      13.416408  21.213203  15.297059  19.209373  28.301943   \n",
       "1    ...      12.727922  25.455844  18.973666  20.124612  32.449961   \n",
       "2    ...      12.727922  25.455844  18.973666  20.124612  32.449961   \n",
       "3    ...      12.727922  25.455844  18.973666  20.124612  32.449961   \n",
       "4    ...      12.727922  25.455844  18.973666  20.124612  32.449961   \n",
       "5    ...      12.727922  25.455844  18.973666  20.124612  32.449961   \n",
       "\n",
       "       dis_9     dis_10     dis_11     dis_12     dis_13  \n",
       "0  51.088159  41.785165  39.115214  40.804412  45.793013  \n",
       "1  55.317267  45.694639  42.426407  42.953463  46.957428  \n",
       "2  55.317267  45.694639  42.426407  42.953463  46.957428  \n",
       "3  55.317267  45.694639  42.426407  42.953463  46.957428  \n",
       "4  55.317267  45.694639  42.426407  42.953463  46.957428  \n",
       "5  55.317267  45.694639  42.426407  42.953463  46.957428  \n",
       "\n",
       "[6 rows x 26 columns]"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#dataframe containing the both all the scaled iBeacon values and the distace from the iBeacon \n",
    "BLE_dis = BLE_df.copy()\n",
    "for j in range(0,13):\n",
    "    for i in range(0,1420):\n",
    "        #Distace is multiplier by three due to the fact that each grid cell is approx. 3m by 3m\n",
    "        dis_ph.append(3 * distance.euclidean(np.array([en_cols[i],en_rows[i]]), b_loc[j]))\n",
    "    BLE_dis['dis_' + str(j+1)] = pd.DataFrame({ col_nms[j]: dis_ph})\n",
    "    dis_ph.clear()\n",
    "BLE_dis.to_csv('datasets/BLE_dis.csv', index=False )\n",
    "BLE_dis.head(6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "      <th>col</th>\n",
       "      <th>row</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.884058</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>14</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.884058</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   b3001  b3002  b3003  b3004  b3005     b3006  b3007  b3008  b3009  b3010  \\\n",
       "0    0.0    0.0    0.0    0.0    0.0  0.884058    0.0    0.0    0.0    0.0   \n",
       "1    0.0    0.0    0.0    0.0    0.0  0.884058    0.0    0.0    0.0    0.0   \n",
       "2    0.0    0.0    0.0    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "3    0.0    0.0    0.0    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "4    0.0    0.0    0.0    0.0    0.0  0.891304    0.0    0.0    0.0    0.0   \n",
       "\n",
       "   b3011  b3012  b3013  col  row  \n",
       "0    0.0    0.0    0.0   14    1  \n",
       "1    0.0    0.0    0.0   15    0  \n",
       "2    0.0    0.0    0.0   15    0  \n",
       "3    0.0    0.0    0.0   15    0  \n",
       "4    0.0    0.0    0.0   15    0  "
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#dataframe containing the scaled iBeacon values along with encoded col and row locations for unlabeled dataset\n",
    "BLE_col_row = BLE_df.copy()\n",
    "BLE_col_row['col'] = col_df\n",
    "BLE_col_row['row'] = row_df\n",
    "BLE_col_row.to_csv('datasets/BLE_col_row.csv', index=False)\n",
    "list1 = []\n",
    "BLE_UL_col_row = scaled_ul.copy()\n",
    "for i in range(0,scaled_ul.shape[0]):\n",
    "    list1.append(-1)\n",
    "BLE_UL_col_row['col'] = pd.DataFrame({ 'col': list1})\n",
    "BLE_UL_col_row['row'] = pd.DataFrame({ 'row': list1})\n",
    "BLE_UL_col_row.to_csv('datasets/BLE_UL_col_row.csv', index=False)\n",
    "BLE_col_row.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 5191 entries, 0 to 5190\n",
      "Data columns (total 15 columns):\n",
      "b3001    5191 non-null float64\n",
      "b3002    5191 non-null float64\n",
      "b3003    5191 non-null float64\n",
      "b3004    5191 non-null float64\n",
      "b3005    5191 non-null float64\n",
      "b3006    5191 non-null float64\n",
      "b3007    5191 non-null float64\n",
      "b3008    5191 non-null float64\n",
      "b3009    5191 non-null float64\n",
      "b3010    5191 non-null float64\n",
      "b3011    5191 non-null float64\n",
      "b3012    5191 non-null float64\n",
      "b3013    5191 non-null float64\n",
      "col      5191 non-null int64\n",
      "row      5191 non-null int64\n",
      "dtypes: float64(13), int64(2)\n",
      "memory usage: 608.4 KB\n"
     ]
    }
   ],
   "source": [
    "BLE_UL_col_row.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#create a 2D array that represents the grid \n",
    "total_cols = 23\n",
    "total_rows = 18\n",
    "grid = np.zeros((18, 23))\n",
    "\n",
    "# Object placement on the grid\n",
    "# The value -10 represents an object on the grid\n",
    "grid[0:6,0:8] = -10\n",
    "grid[:,0:2]  = -10\n",
    "grid[6:9,0:2]  = 0\n",
    "grid[9:13,6:8] = -10\n",
    "grid[10:13,5] = -10\n",
    "grid[10,16] = -10\n",
    "grid[10:12,12:15]  = -10\n",
    "grid[9:12,17:21]  = -10\n",
    "grid[5:7,19:23] = -10\n",
    "grid[1:5,21:23] = -10\n",
    "\n",
    "np.save('grids/objects_grid.npy', grid)   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n8Ja5ErcDyUQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a112fc5c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plotting the grid using sns\n",
    "f, ax = plt.subplots(figsize=(10, 7))\n",
    "sns.heatmap(grid, annot=True, fmt=\"g\", cmap='viridis', ax=ax)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a172295c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Plotting the grid with the number of datapoints available in labeled dataset for each grid location\n",
    "for i in range(0,rows):\n",
    "    grid[col_row.iat[i,1],col_row.iat[i,0]] += 1\n",
    "f, ax = plt.subplots(figsize=(10, 7))\n",
    "sns.heatmap(grid, annot=True, fmt=\"g\", cmap='viridis', ax=ax)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#create a binary BLE_RSSI array in which each RSSI value grater than 0 is 1 and all the other values are 0\n",
    "#the binary BLE array will be used to train a deep neural net to predict the RSSI value based on location and distance\n",
    "binary_BLE = np.zeros(BLE_df.shape)\n",
    "shape = BLE_df.shape\n",
    "for i in range (0,shape[0]):\n",
    "    for j in range (0,shape[1]):\n",
    "        if (BLE_df.iat[i,j] > 0):\n",
    "            binary_BLE[i,j] = 1    \n",
    "np.save('datasets/binary_BLE.npy', binary_BLE) \n",
    "binary_BLE[0,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "#input data \n",
    "X = col_row_dis.values\n",
    "#output data\n",
    "y = binary_BLE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#train-test split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.05, shuffle=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_1 (Dense)              (None, 30)                480       \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 128)               3968      \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 256)               33024     \n",
      "_________________________________________________________________\n",
      "dense_4 (Dense)              (None, 512)               131584    \n",
      "_________________________________________________________________\n",
      "dense_5 (Dense)              (None, 13)                6669      \n",
      "=================================================================\n",
      "Total params: 175,725\n",
      "Trainable params: 175,725\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "#The environment model to predict the iBeacon closest to the location based on \n",
    "#the location and distace to the iBeacons from the location\n",
    "env_model = Sequential()\n",
    "env_model.add(Dense(30, input_dim=15, activation='relu'))\n",
    "env_model.add(Dense(128, activation='relu'))\n",
    "env_model.add(Dense(256, activation='relu'))\n",
    "env_model.add(Dense(512, activation='relu'))\n",
    "env_model.add(Dense(13, activation='sigmoid'))\n",
    "\n",
    "env_model.summary()\n",
    "env_model.save('model_weights/weights.environment.h5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#compile the environment model\n",
    "epochs = 50\n",
    "env_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['top_k_categorical_accuracy','accuracy'])\n",
    "\n",
    "checkpointer = ModelCheckpoint(filepath='model_weights/weights.environment.h5', \n",
    "                              verbose=1, save_best_only=True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 1349 samples, validate on 71 samples\n",
      "Epoch 1/50\n",
      "1349/1349 [==============================] - 1s 462us/step - loss: 0.2514 - top_k_categorical_accuracy: 0.9259 - acc: 0.9118 - val_loss: 0.1897 - val_top_k_categorical_accuracy: 0.9577 - val_acc: 0.9274\n",
      "\n",
      "Epoch 00001: val_loss improved from inf to 0.18969, saving model to model_weights/weights.environment.h5\n",
      "Epoch 2/50\n",
      "1349/1349 [==============================] - 0s 322us/step - loss: 0.1596 - top_k_categorical_accuracy: 0.9830 - acc: 0.9369 - val_loss: 0.1744 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9112\n",
      "\n",
      "Epoch 00002: val_loss improved from 0.18969 to 0.17439, saving model to model_weights/weights.environment.h5\n",
      "Epoch 3/50\n",
      "1349/1349 [==============================] - 0s 332us/step - loss: 0.1424 - top_k_categorical_accuracy: 0.9926 - acc: 0.9405 - val_loss: 0.1697 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9296\n",
      "\n",
      "Epoch 00003: val_loss improved from 0.17439 to 0.16970, saving model to model_weights/weights.environment.h5\n",
      "Epoch 4/50\n",
      "1349/1349 [==============================] - 0s 308us/step - loss: 0.1345 - top_k_categorical_accuracy: 0.9941 - acc: 0.9437 - val_loss: 0.1579 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9307\n",
      "\n",
      "Epoch 00004: val_loss improved from 0.16970 to 0.15793, saving model to model_weights/weights.environment.h5\n",
      "Epoch 5/50\n",
      "1349/1349 [==============================] - 0s 315us/step - loss: 0.1314 - top_k_categorical_accuracy: 0.9933 - acc: 0.9449 - val_loss: 0.1721 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9263\n",
      "\n",
      "Epoch 00005: val_loss did not improve\n",
      "Epoch 6/50\n",
      "1349/1349 [==============================] - 0s 317us/step - loss: 0.1271 - top_k_categorical_accuracy: 0.9926 - acc: 0.9459 - val_loss: 0.1586 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9328\n",
      "\n",
      "Epoch 00006: val_loss did not improve\n",
      "Epoch 7/50\n",
      "1349/1349 [==============================] - 0s 310us/step - loss: 0.1250 - top_k_categorical_accuracy: 0.9933 - acc: 0.9479 - val_loss: 0.1493 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9382\n",
      "\n",
      "Epoch 00007: val_loss improved from 0.15793 to 0.14925, saving model to model_weights/weights.environment.h5\n",
      "Epoch 8/50\n",
      "1349/1349 [==============================] - 0s 324us/step - loss: 0.1215 - top_k_categorical_accuracy: 0.9948 - acc: 0.9477 - val_loss: 0.1636 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9285\n",
      "\n",
      "Epoch 00008: val_loss did not improve\n",
      "Epoch 9/50\n",
      "1349/1349 [==============================] - 0s 325us/step - loss: 0.1199 - top_k_categorical_accuracy: 0.9918 - acc: 0.9499 - val_loss: 0.1486 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9361\n",
      "\n",
      "Epoch 00009: val_loss improved from 0.14925 to 0.14861, saving model to model_weights/weights.environment.h5\n",
      "Epoch 10/50\n",
      "1349/1349 [==============================] - 0s 324us/step - loss: 0.1204 - top_k_categorical_accuracy: 0.9941 - acc: 0.9500 - val_loss: 0.1496 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9339\n",
      "\n",
      "Epoch 00010: val_loss did not improve\n",
      "Epoch 11/50\n",
      "1349/1349 [==============================] - 0s 310us/step - loss: 0.1166 - top_k_categorical_accuracy: 0.9941 - acc: 0.9525 - val_loss: 0.1538 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9382\n",
      "\n",
      "Epoch 00011: val_loss did not improve\n",
      "Epoch 12/50\n",
      "1349/1349 [==============================] - 0s 311us/step - loss: 0.1165 - top_k_categorical_accuracy: 0.9956 - acc: 0.9533 - val_loss: 0.1529 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9437\n",
      "\n",
      "Epoch 00012: val_loss did not improve\n",
      "Epoch 13/50\n",
      "1349/1349 [==============================] - 0s 307us/step - loss: 0.1143 - top_k_categorical_accuracy: 0.9941 - acc: 0.9523 - val_loss: 0.1450 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9415\n",
      "\n",
      "Epoch 00013: val_loss improved from 0.14861 to 0.14500, saving model to model_weights/weights.environment.h5\n",
      "Epoch 14/50\n",
      "1349/1349 [==============================] - 0s 311us/step - loss: 0.1122 - top_k_categorical_accuracy: 0.9948 - acc: 0.9545 - val_loss: 0.1468 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9415\n",
      "\n",
      "Epoch 00014: val_loss did not improve\n",
      "Epoch 15/50\n",
      "1349/1349 [==============================] - 0s 313us/step - loss: 0.1138 - top_k_categorical_accuracy: 0.9956 - acc: 0.9531 - val_loss: 0.1672 - val_top_k_categorical_accuracy: 0.9577 - val_acc: 0.9361\n",
      "\n",
      "Epoch 00015: val_loss did not improve\n",
      "Epoch 16/50\n",
      "1349/1349 [==============================] - 0s 322us/step - loss: 0.1111 - top_k_categorical_accuracy: 0.9948 - acc: 0.9544 - val_loss: 0.1489 - val_top_k_categorical_accuracy: 0.9859 - val_acc: 0.9317\n",
      "\n",
      "Epoch 00016: val_loss did not improve\n",
      "Epoch 17/50\n",
      "1349/1349 [==============================] - 0s 325us/step - loss: 0.1095 - top_k_categorical_accuracy: 0.9948 - acc: 0.9546 - val_loss: 0.1546 - val_top_k_categorical_accuracy: 0.9577 - val_acc: 0.9361\n",
      "\n",
      "Epoch 00017: val_loss did not improve\n",
      "Epoch 18/50\n",
      "1349/1349 [==============================] - 0s 309us/step - loss: 0.1079 - top_k_categorical_accuracy: 0.9970 - acc: 0.9550 - val_loss: 0.1586 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9317\n",
      "\n",
      "Epoch 00018: val_loss did not improve\n",
      "Epoch 19/50\n",
      "1349/1349 [==============================] - 0s 338us/step - loss: 0.1100 - top_k_categorical_accuracy: 0.9963 - acc: 0.9535 - val_loss: 0.1430 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9426\n",
      "\n",
      "Epoch 00019: val_loss improved from 0.14500 to 0.14303, saving model to model_weights/weights.environment.h5\n",
      "Epoch 20/50\n",
      "1349/1349 [==============================] - 0s 318us/step - loss: 0.1063 - top_k_categorical_accuracy: 0.9948 - acc: 0.9548 - val_loss: 0.1571 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9404\n",
      "\n",
      "Epoch 00020: val_loss did not improve\n",
      "Epoch 21/50\n",
      "1349/1349 [==============================] - 0s 346us/step - loss: 0.1077 - top_k_categorical_accuracy: 0.9970 - acc: 0.9544 - val_loss: 0.1512 - val_top_k_categorical_accuracy: 0.9859 - val_acc: 0.9317\n",
      "\n",
      "Epoch 00021: val_loss did not improve\n",
      "Epoch 22/50\n",
      "1349/1349 [==============================] - 0s 325us/step - loss: 0.1064 - top_k_categorical_accuracy: 0.9948 - acc: 0.9554 - val_loss: 0.1481 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9458\n",
      "\n",
      "Epoch 00022: val_loss did not improve\n",
      "Epoch 23/50\n",
      "1349/1349 [==============================] - 0s 347us/step - loss: 0.1051 - top_k_categorical_accuracy: 0.9970 - acc: 0.9560 - val_loss: 0.1604 - val_top_k_categorical_accuracy: 0.9859 - val_acc: 0.9350\n",
      "\n",
      "Epoch 00023: val_loss did not improve\n",
      "Epoch 24/50\n",
      "1349/1349 [==============================] - 0s 314us/step - loss: 0.1049 - top_k_categorical_accuracy: 0.9956 - acc: 0.9553 - val_loss: 0.1499 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9426\n",
      "\n",
      "Epoch 00024: val_loss did not improve\n",
      "Epoch 25/50\n",
      "1349/1349 [==============================] - 0s 316us/step - loss: 0.1067 - top_k_categorical_accuracy: 0.9978 - acc: 0.9553 - val_loss: 0.1523 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9382\n",
      "\n",
      "Epoch 00025: val_loss did not improve\n",
      "Epoch 26/50\n",
      "1349/1349 [==============================] - 0s 318us/step - loss: 0.1022 - top_k_categorical_accuracy: 0.9978 - acc: 0.9558 - val_loss: 0.1427 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9437\n",
      "\n",
      "Epoch 00026: val_loss improved from 0.14303 to 0.14266, saving model to model_weights/weights.environment.h5\n",
      "Epoch 27/50\n",
      "1349/1349 [==============================] - 0s 321us/step - loss: 0.1050 - top_k_categorical_accuracy: 0.9963 - acc: 0.9546 - val_loss: 0.1444 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9361\n",
      "\n",
      "Epoch 00027: val_loss did not improve\n",
      "Epoch 28/50\n",
      "1349/1349 [==============================] - 0s 315us/step - loss: 0.1042 - top_k_categorical_accuracy: 0.9978 - acc: 0.9561 - val_loss: 0.1528 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9382\n",
      "\n",
      "Epoch 00028: val_loss did not improve\n",
      "Epoch 29/50\n",
      "1349/1349 [==============================] - 0s 313us/step - loss: 0.1013 - top_k_categorical_accuracy: 0.9985 - acc: 0.9561 - val_loss: 0.1406 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9469\n",
      "\n",
      "Epoch 00029: val_loss improved from 0.14266 to 0.14060, saving model to model_weights/weights.environment.h5\n",
      "Epoch 30/50\n",
      "1349/1349 [==============================] - 0s 307us/step - loss: 0.1033 - top_k_categorical_accuracy: 0.9978 - acc: 0.9574 - val_loss: 0.1492 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9382\n",
      "\n",
      "Epoch 00030: val_loss did not improve\n",
      "Epoch 31/50\n",
      "1349/1349 [==============================] - 0s 305us/step - loss: 0.1012 - top_k_categorical_accuracy: 0.9985 - acc: 0.9570 - val_loss: 0.1470 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9361\n",
      "\n",
      "Epoch 00031: val_loss did not improve\n",
      "Epoch 32/50\n",
      "1349/1349 [==============================] - 0s 322us/step - loss: 0.1014 - top_k_categorical_accuracy: 0.9985 - acc: 0.9568 - val_loss: 0.1494 - val_top_k_categorical_accuracy: 0.9859 - val_acc: 0.9372\n",
      "\n",
      "Epoch 00032: val_loss did not improve\n",
      "Epoch 33/50\n",
      "1349/1349 [==============================] - 0s 316us/step - loss: 0.1019 - top_k_categorical_accuracy: 0.9985 - acc: 0.9570 - val_loss: 0.1494 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9393\n",
      "\n",
      "Epoch 00033: val_loss did not improve\n",
      "Epoch 34/50\n",
      "1349/1349 [==============================] - 0s 321us/step - loss: 0.1010 - top_k_categorical_accuracy: 0.9993 - acc: 0.9567 - val_loss: 0.1491 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9458\n",
      "\n",
      "Epoch 00034: val_loss did not improve\n",
      "Epoch 35/50\n",
      "1349/1349 [==============================] - 0s 333us/step - loss: 0.1007 - top_k_categorical_accuracy: 0.9985 - acc: 0.9576 - val_loss: 0.1478 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9469\n",
      "\n",
      "Epoch 00035: val_loss did not improve\n",
      "Epoch 36/50\n",
      "1349/1349 [==============================] - 0s 320us/step - loss: 0.1000 - top_k_categorical_accuracy: 0.9978 - acc: 0.9570 - val_loss: 0.1439 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9437\n",
      "\n",
      "Epoch 00036: val_loss did not improve\n",
      "Epoch 37/50\n",
      "1349/1349 [==============================] - 0s 348us/step - loss: 0.0992 - top_k_categorical_accuracy: 0.9985 - acc: 0.9571 - val_loss: 0.1400 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9382\n",
      "\n",
      "Epoch 00037: val_loss improved from 0.14060 to 0.13998, saving model to model_weights/weights.environment.h5\n",
      "Epoch 38/50\n",
      "1349/1349 [==============================] - 0s 331us/step - loss: 0.1015 - top_k_categorical_accuracy: 0.9970 - acc: 0.9563 - val_loss: 0.1436 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9437\n",
      "\n",
      "Epoch 00038: val_loss did not improve\n",
      "Epoch 39/50\n",
      "1349/1349 [==============================] - 0s 332us/step - loss: 0.0983 - top_k_categorical_accuracy: 0.9993 - acc: 0.9577 - val_loss: 0.1455 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9393\n",
      "\n",
      "Epoch 00039: val_loss did not improve\n",
      "Epoch 40/50\n",
      "1349/1349 [==============================] - 0s 333us/step - loss: 0.0988 - top_k_categorical_accuracy: 0.9978 - acc: 0.9567 - val_loss: 0.1490 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9426\n",
      "\n",
      "Epoch 00040: val_loss did not improve\n",
      "Epoch 41/50\n",
      "1349/1349 [==============================] - 0s 325us/step - loss: 0.0992 - top_k_categorical_accuracy: 0.9993 - acc: 0.9584 - val_loss: 0.1389 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9415\n",
      "\n",
      "Epoch 00041: val_loss improved from 0.13998 to 0.13890, saving model to model_weights/weights.environment.h5\n",
      "Epoch 42/50\n",
      "1349/1349 [==============================] - 0s 338us/step - loss: 0.0972 - top_k_categorical_accuracy: 0.9978 - acc: 0.9588 - val_loss: 0.1442 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9480\n",
      "\n",
      "Epoch 00042: val_loss did not improve\n",
      "Epoch 43/50\n",
      "1349/1349 [==============================] - 0s 365us/step - loss: 0.0979 - top_k_categorical_accuracy: 0.9993 - acc: 0.9575 - val_loss: 0.1458 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9426\n",
      "\n",
      "Epoch 00043: val_loss did not improve\n",
      "Epoch 44/50\n",
      "1349/1349 [==============================] - 0s 309us/step - loss: 0.0992 - top_k_categorical_accuracy: 0.9970 - acc: 0.9580 - val_loss: 0.1646 - val_top_k_categorical_accuracy: 0.9718 - val_acc: 0.9361\n",
      "\n",
      "Epoch 00044: val_loss did not improve\n",
      "Epoch 45/50\n",
      "1349/1349 [==============================] - 0s 356us/step - loss: 0.0988 - top_k_categorical_accuracy: 0.9978 - acc: 0.9580 - val_loss: 0.1431 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9458\n",
      "\n",
      "Epoch 00045: val_loss did not improve\n",
      "Epoch 46/50\n",
      "1349/1349 [==============================] - 1s 417us/step - loss: 0.0973 - top_k_categorical_accuracy: 0.9985 - acc: 0.9572 - val_loss: 0.1489 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9415\n",
      "\n",
      "Epoch 00046: val_loss did not improve\n",
      "Epoch 47/50\n",
      "1349/1349 [==============================] - 0s 346us/step - loss: 0.0965 - top_k_categorical_accuracy: 0.9978 - acc: 0.9592 - val_loss: 0.1331 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9437\n",
      "\n",
      "Epoch 00047: val_loss improved from 0.13890 to 0.13306, saving model to model_weights/weights.environment.h5\n",
      "Epoch 48/50\n",
      "1349/1349 [==============================] - 0s 316us/step - loss: 0.0958 - top_k_categorical_accuracy: 0.9978 - acc: 0.9588 - val_loss: 0.1411 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9415\n",
      "\n",
      "Epoch 00048: val_loss did not improve\n",
      "Epoch 49/50\n",
      "1349/1349 [==============================] - 0s 340us/step - loss: 0.0977 - top_k_categorical_accuracy: 0.9985 - acc: 0.9571 - val_loss: 0.1494 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9372\n",
      "\n",
      "Epoch 00049: val_loss did not improve\n",
      "Epoch 50/50\n",
      "1349/1349 [==============================] - 0s 324us/step - loss: 0.0972 - top_k_categorical_accuracy: 0.9985 - acc: 0.9570 - val_loss: 0.1381 - val_top_k_categorical_accuracy: 1.0000 - val_acc: 0.9447\n",
      "\n",
      "Epoch 00050: val_loss did not improve\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0x1a18840f60>"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#train the model\n",
    "#env_model.load_weights('weights.environment.h5')\n",
    "env_model.fit(X_train, y_train,validation_data=(X_test, y_test),\n",
    "          epochs=epochs, batch_size=20, callbacks=[checkpointer], verbose=1) #"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1420, 1)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Train the variational encoder model with the scaled RSSI data\n",
    "from VAE import VAE\n",
    "\n",
    "X = pd.read_csv('datasets/Scaled_BLE_RSSI.csv')\n",
    "y = pd.read_csv('datasets/encoded_columns.csv')\n",
    "vae_model = VAE(X.shape[1])\n",
    "y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1065, 23)"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#devide the data for testing and training\n",
    "#y1 = keras.utils.to_categorical(y, num_classes=total_cols)\n",
    "#x = np.load('datasets/binary_BLE.npy')\n",
    "X_train, X_test, y_train, y_test= train_test_split(X, y, test_size=0.25, shuffle=True)\n",
    "tt = y_train\n",
    "zz = y_test\n",
    "y_train = keras.utils.to_categorical(tt , num_classes=total_cols)\n",
    "y_test = keras.utils.to_categorical(zz, num_classes=total_cols)\n",
    "y_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#compile the VAE model\n",
    "batches = 20#batch size\n",
    "epoch = 100#number of epochs\n",
    "checkpointer = ModelCheckpoint(filepath='model_weights/weights.vae.h5', \n",
    "                              verbose=1, save_best_only=True)\n",
    "\n",
    "vae_model.vae.compile(optimizer='adam', loss=vae_model.loss_vae)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 1065 samples, validate on 355 samples\n",
      "Epoch 1/100\n",
      "1065/1065 [==============================] - 1s 698us/step - loss: 0.1220 - val_loss: 0.0741\n",
      "\n",
      "Epoch 00001: val_loss improved from inf to 0.07408, saving model to model_weights/weights.vae.h5\n",
      "Epoch 2/100\n",
      "1065/1065 [==============================] - 0s 237us/step - loss: 0.0694 - val_loss: 0.0614\n",
      "\n",
      "Epoch 00002: val_loss improved from 0.07408 to 0.06137, saving model to model_weights/weights.vae.h5\n",
      "Epoch 3/100\n",
      "1065/1065 [==============================] - 0s 227us/step - loss: 0.0541 - val_loss: 0.0475\n",
      "\n",
      "Epoch 00003: val_loss improved from 0.06137 to 0.04746, saving model to model_weights/weights.vae.h5\n",
      "Epoch 4/100\n",
      "1065/1065 [==============================] - 0s 203us/step - loss: 0.0397 - val_loss: 0.0330\n",
      "\n",
      "Epoch 00004: val_loss improved from 0.04746 to 0.03302, saving model to model_weights/weights.vae.h5\n",
      "Epoch 5/100\n",
      "1065/1065 [==============================] - 0s 230us/step - loss: 0.0294 - val_loss: 0.0283\n",
      "\n",
      "Epoch 00005: val_loss improved from 0.03302 to 0.02833, saving model to model_weights/weights.vae.h5\n",
      "Epoch 6/100\n",
      "1065/1065 [==============================] - 0s 215us/step - loss: 0.0254 - val_loss: 0.0256\n",
      "\n",
      "Epoch 00006: val_loss improved from 0.02833 to 0.02561, saving model to model_weights/weights.vae.h5\n",
      "Epoch 7/100\n",
      "1065/1065 [==============================] - 0s 213us/step - loss: 0.0237 - val_loss: 0.0248\n",
      "\n",
      "Epoch 00007: val_loss improved from 0.02561 to 0.02476, saving model to model_weights/weights.vae.h5\n",
      "Epoch 8/100\n",
      "1065/1065 [==============================] - 0s 229us/step - loss: 0.0230 - val_loss: 0.0239\n",
      "\n",
      "Epoch 00008: val_loss improved from 0.02476 to 0.02392, saving model to model_weights/weights.vae.h5\n",
      "Epoch 9/100\n",
      "1065/1065 [==============================] - 0s 230us/step - loss: 0.0224 - val_loss: 0.0236\n",
      "\n",
      "Epoch 00009: val_loss improved from 0.02392 to 0.02356, saving model to model_weights/weights.vae.h5\n",
      "Epoch 10/100\n",
      "1065/1065 [==============================] - 0s 249us/step - loss: 0.0227 - val_loss: 0.0232\n",
      "\n",
      "Epoch 00010: val_loss improved from 0.02356 to 0.02319, saving model to model_weights/weights.vae.h5\n",
      "Epoch 11/100\n",
      "1065/1065 [==============================] - 0s 224us/step - loss: 0.0217 - val_loss: 0.0222\n",
      "\n",
      "Epoch 00011: val_loss improved from 0.02319 to 0.02216, saving model to model_weights/weights.vae.h5\n",
      "Epoch 12/100\n",
      "1065/1065 [==============================] - 0s 248us/step - loss: 0.0210 - val_loss: 0.0212\n",
      "\n",
      "Epoch 00012: val_loss improved from 0.02216 to 0.02122, saving model to model_weights/weights.vae.h5\n",
      "Epoch 13/100\n",
      "1065/1065 [==============================] - 0s 229us/step - loss: 0.0206 - val_loss: 0.0213\n",
      "\n",
      "Epoch 00013: val_loss did not improve\n",
      "Epoch 14/100\n",
      "1065/1065 [==============================] - 0s 236us/step - loss: 0.0205 - val_loss: 0.0205\n",
      "\n",
      "Epoch 00014: val_loss improved from 0.02122 to 0.02046, saving model to model_weights/weights.vae.h5\n",
      "Epoch 15/100\n",
      "1065/1065 [==============================] - 0s 240us/step - loss: 0.0197 - val_loss: 0.0202\n",
      "\n",
      "Epoch 00015: val_loss improved from 0.02046 to 0.02022, saving model to model_weights/weights.vae.h5\n",
      "Epoch 16/100\n",
      "1065/1065 [==============================] - 0s 233us/step - loss: 0.0196 - val_loss: 0.0205\n",
      "\n",
      "Epoch 00016: val_loss did not improve\n",
      "Epoch 17/100\n",
      "1065/1065 [==============================] - 0s 219us/step - loss: 0.0192 - val_loss: 0.0203\n",
      "\n",
      "Epoch 00017: val_loss did not improve\n",
      "Epoch 18/100\n",
      "1065/1065 [==============================] - 0s 230us/step - loss: 0.0187 - val_loss: 0.0188\n",
      "\n",
      "Epoch 00018: val_loss improved from 0.02022 to 0.01878, saving model to model_weights/weights.vae.h5\n",
      "Epoch 19/100\n",
      "1065/1065 [==============================] - 0s 218us/step - loss: 0.0181 - val_loss: 0.0183\n",
      "\n",
      "Epoch 00019: val_loss improved from 0.01878 to 0.01830, saving model to model_weights/weights.vae.h5\n",
      "Epoch 20/100\n",
      "1065/1065 [==============================] - 0s 207us/step - loss: 0.0168 - val_loss: 0.0176\n",
      "\n",
      "Epoch 00020: val_loss improved from 0.01830 to 0.01764, saving model to model_weights/weights.vae.h5\n",
      "Epoch 21/100\n",
      "1065/1065 [==============================] - 0s 226us/step - loss: 0.0163 - val_loss: 0.0172\n",
      "\n",
      "Epoch 00021: val_loss improved from 0.01764 to 0.01719, saving model to model_weights/weights.vae.h5\n",
      "Epoch 22/100\n",
      "1065/1065 [==============================] - 0s 218us/step - loss: 0.0161 - val_loss: 0.0170\n",
      "\n",
      "Epoch 00022: val_loss improved from 0.01719 to 0.01705, saving model to model_weights/weights.vae.h5\n",
      "Epoch 23/100\n",
      "1065/1065 [==============================] - 0s 223us/step - loss: 0.0160 - val_loss: 0.0174\n",
      "\n",
      "Epoch 00023: val_loss did not improve\n",
      "Epoch 24/100\n",
      "1065/1065 [==============================] - 0s 226us/step - loss: 0.0157 - val_loss: 0.0165\n",
      "\n",
      "Epoch 00024: val_loss improved from 0.01705 to 0.01652, saving model to model_weights/weights.vae.h5\n",
      "Epoch 25/100\n",
      "1065/1065 [==============================] - 0s 220us/step - loss: 0.0155 - val_loss: 0.0180\n",
      "\n",
      "Epoch 00025: val_loss did not improve\n",
      "Epoch 26/100\n",
      "1065/1065 [==============================] - 0s 226us/step - loss: 0.0162 - val_loss: 0.0167\n",
      "\n",
      "Epoch 00026: val_loss did not improve\n",
      "Epoch 27/100\n",
      "1065/1065 [==============================] - 0s 214us/step - loss: 0.0155 - val_loss: 0.0166\n",
      "\n",
      "Epoch 00027: val_loss did not improve\n",
      "Epoch 28/100\n",
      "1065/1065 [==============================] - 0s 220us/step - loss: 0.0154 - val_loss: 0.0160\n",
      "\n",
      "Epoch 00028: val_loss improved from 0.01652 to 0.01602, saving model to model_weights/weights.vae.h5\n",
      "Epoch 29/100\n",
      "1065/1065 [==============================] - 0s 223us/step - loss: 0.0156 - val_loss: 0.0164\n",
      "\n",
      "Epoch 00029: val_loss did not improve\n",
      "Epoch 30/100\n",
      "1065/1065 [==============================] - 0s 220us/step - loss: 0.0159 - val_loss: 0.0166\n",
      "\n",
      "Epoch 00030: val_loss did not improve\n",
      "Epoch 31/100\n",
      "1065/1065 [==============================] - 0s 246us/step - loss: 0.0152 - val_loss: 0.0157\n",
      "\n",
      "Epoch 00031: val_loss improved from 0.01602 to 0.01567, saving model to model_weights/weights.vae.h5\n",
      "Epoch 32/100\n",
      "1065/1065 [==============================] - 0s 240us/step - loss: 0.0151 - val_loss: 0.0158\n",
      "\n",
      "Epoch 00032: val_loss did not improve\n",
      "Epoch 33/100\n",
      "1065/1065 [==============================] - 0s 321us/step - loss: 0.0152 - val_loss: 0.0162\n",
      "\n",
      "Epoch 00033: val_loss did not improve\n",
      "Epoch 34/100\n",
      "1065/1065 [==============================] - 0s 282us/step - loss: 0.0151 - val_loss: 0.0157\n",
      "\n",
      "Epoch 00034: val_loss did not improve\n",
      "Epoch 35/100\n",
      "1065/1065 [==============================] - 0s 260us/step - loss: 0.0150 - val_loss: 0.0157\n",
      "\n",
      "Epoch 00035: val_loss did not improve\n",
      "Epoch 36/100\n",
      "1065/1065 [==============================] - 0s 241us/step - loss: 0.0147 - val_loss: 0.0154\n",
      "\n",
      "Epoch 00036: val_loss improved from 0.01567 to 0.01537, saving model to model_weights/weights.vae.h5\n",
      "Epoch 37/100\n",
      "1065/1065 [==============================] - 0s 231us/step - loss: 0.0151 - val_loss: 0.0154\n",
      "\n",
      "Epoch 00037: val_loss did not improve\n",
      "Epoch 38/100\n",
      "1065/1065 [==============================] - 0s 237us/step - loss: 0.0151 - val_loss: 0.0154\n",
      "\n",
      "Epoch 00038: val_loss did not improve\n",
      "Epoch 39/100\n",
      "1065/1065 [==============================] - 0s 228us/step - loss: 0.0147 - val_loss: 0.0157\n",
      "\n",
      "Epoch 00039: val_loss did not improve\n",
      "Epoch 40/100\n",
      "1065/1065 [==============================] - 0s 226us/step - loss: 0.0148 - val_loss: 0.0160\n",
      "\n",
      "Epoch 00040: val_loss did not improve\n",
      "Epoch 41/100\n",
      "1065/1065 [==============================] - 0s 220us/step - loss: 0.0156 - val_loss: 0.0160\n",
      "\n",
      "Epoch 00041: val_loss did not improve\n",
      "Epoch 42/100\n",
      "1065/1065 [==============================] - 0s 231us/step - loss: 0.0151 - val_loss: 0.0151\n",
      "\n",
      "Epoch 00042: val_loss improved from 0.01537 to 0.01515, saving model to model_weights/weights.vae.h5\n",
      "Epoch 43/100\n",
      "1065/1065 [==============================] - 0s 230us/step - loss: 0.0146 - val_loss: 0.0154\n",
      "\n",
      "Epoch 00043: val_loss did not improve\n",
      "Epoch 44/100\n",
      "1065/1065 [==============================] - 0s 229us/step - loss: 0.0147 - val_loss: 0.0154\n",
      "\n",
      "Epoch 00044: val_loss did not improve\n",
      "Epoch 45/100\n",
      "1065/1065 [==============================] - 0s 224us/step - loss: 0.0149 - val_loss: 0.0155\n",
      "\n",
      "Epoch 00045: val_loss did not improve\n",
      "Epoch 46/100\n",
      "1065/1065 [==============================] - 0s 222us/step - loss: 0.0147 - val_loss: 0.0155\n",
      "\n",
      "Epoch 00046: val_loss did not improve\n",
      "Epoch 47/100\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1065/1065 [==============================] - 0s 225us/step - loss: 0.0150 - val_loss: 0.0155\n",
      "\n",
      "Epoch 00047: val_loss did not improve\n",
      "Epoch 48/100\n",
      "1065/1065 [==============================] - 0s 213us/step - loss: 0.0144 - val_loss: 0.0152\n",
      "\n",
      "Epoch 00048: val_loss did not improve\n",
      "Epoch 49/100\n",
      "1065/1065 [==============================] - 0s 243us/step - loss: 0.0148 - val_loss: 0.0154\n",
      "\n",
      "Epoch 00049: val_loss did not improve\n",
      "Epoch 50/100\n",
      "1065/1065 [==============================] - 0s 233us/step - loss: 0.0148 - val_loss: 0.0155\n",
      "\n",
      "Epoch 00050: val_loss did not improve\n",
      "Epoch 51/100\n",
      "1065/1065 [==============================] - 0s 235us/step - loss: 0.0145 - val_loss: 0.0153\n",
      "\n",
      "Epoch 00051: val_loss did not improve\n",
      "Epoch 52/100\n",
      "1065/1065 [==============================] - 0s 236us/step - loss: 0.0144 - val_loss: 0.0151\n",
      "\n",
      "Epoch 00052: val_loss improved from 0.01515 to 0.01514, saving model to model_weights/weights.vae.h5\n",
      "Epoch 53/100\n",
      "1065/1065 [==============================] - 0s 234us/step - loss: 0.0145 - val_loss: 0.0153\n",
      "\n",
      "Epoch 00053: val_loss did not improve\n",
      "Epoch 54/100\n",
      "1065/1065 [==============================] - 0s 249us/step - loss: 0.0148 - val_loss: 0.0156\n",
      "\n",
      "Epoch 00054: val_loss did not improve\n",
      "Epoch 55/100\n",
      "1065/1065 [==============================] - 0s 228us/step - loss: 0.0154 - val_loss: 0.0158\n",
      "\n",
      "Epoch 00055: val_loss did not improve\n",
      "Epoch 56/100\n",
      "1065/1065 [==============================] - 0s 230us/step - loss: 0.0156 - val_loss: 0.0162\n",
      "\n",
      "Epoch 00056: val_loss did not improve\n",
      "Epoch 57/100\n",
      "1065/1065 [==============================] - 0s 249us/step - loss: 0.0158 - val_loss: 0.0158\n",
      "\n",
      "Epoch 00057: val_loss did not improve\n",
      "Epoch 58/100\n",
      "1065/1065 [==============================] - 0s 239us/step - loss: 0.0149 - val_loss: 0.0159\n",
      "\n",
      "Epoch 00058: val_loss did not improve\n",
      "Epoch 59/100\n",
      "1065/1065 [==============================] - 0s 229us/step - loss: 0.0148 - val_loss: 0.0155\n",
      "\n",
      "Epoch 00059: val_loss did not improve\n",
      "Epoch 60/100\n",
      "1065/1065 [==============================] - 0s 218us/step - loss: 0.0145 - val_loss: 0.0150\n",
      "\n",
      "Epoch 00060: val_loss improved from 0.01514 to 0.01499, saving model to model_weights/weights.vae.h5\n",
      "Epoch 61/100\n",
      "1065/1065 [==============================] - 0s 235us/step - loss: 0.0147 - val_loss: 0.0150\n",
      "\n",
      "Epoch 00061: val_loss did not improve\n",
      "Epoch 62/100\n",
      "1065/1065 [==============================] - 0s 228us/step - loss: 0.0145 - val_loss: 0.0152\n",
      "\n",
      "Epoch 00062: val_loss did not improve\n",
      "Epoch 63/100\n",
      "1065/1065 [==============================] - 0s 234us/step - loss: 0.0144 - val_loss: 0.0150\n",
      "\n",
      "Epoch 00063: val_loss did not improve\n",
      "Epoch 64/100\n",
      "1065/1065 [==============================] - 0s 233us/step - loss: 0.0144 - val_loss: 0.0151\n",
      "\n",
      "Epoch 00064: val_loss did not improve\n",
      "Epoch 65/100\n",
      "1065/1065 [==============================] - 0s 241us/step - loss: 0.0145 - val_loss: 0.0149\n",
      "\n",
      "Epoch 00065: val_loss improved from 0.01499 to 0.01492, saving model to model_weights/weights.vae.h5\n",
      "Epoch 66/100\n",
      "1065/1065 [==============================] - 0s 266us/step - loss: 0.0145 - val_loss: 0.0155\n",
      "\n",
      "Epoch 00066: val_loss did not improve\n",
      "Epoch 67/100\n",
      "1065/1065 [==============================] - 0s 237us/step - loss: 0.0146 - val_loss: 0.0149\n",
      "\n",
      "Epoch 00067: val_loss improved from 0.01492 to 0.01488, saving model to model_weights/weights.vae.h5\n",
      "Epoch 68/100\n",
      "1065/1065 [==============================] - 0s 271us/step - loss: 0.0144 - val_loss: 0.0155\n",
      "\n",
      "Epoch 00068: val_loss did not improve\n",
      "Epoch 69/100\n",
      "1065/1065 [==============================] - 0s 257us/step - loss: 0.0147 - val_loss: 0.0157\n",
      "\n",
      "Epoch 00069: val_loss did not improve\n",
      "Epoch 70/100\n",
      "1065/1065 [==============================] - 0s 254us/step - loss: 0.0147 - val_loss: 0.0150\n",
      "\n",
      "Epoch 00070: val_loss did not improve\n",
      "Epoch 71/100\n",
      "1065/1065 [==============================] - 0s 257us/step - loss: 0.0147 - val_loss: 0.0153\n",
      "\n",
      "Epoch 00071: val_loss did not improve\n",
      "Epoch 72/100\n",
      "1065/1065 [==============================] - 0s 253us/step - loss: 0.0147 - val_loss: 0.0153\n",
      "\n",
      "Epoch 00072: val_loss did not improve\n",
      "Epoch 73/100\n",
      "1065/1065 [==============================] - 0s 235us/step - loss: 0.0144 - val_loss: 0.0149\n",
      "\n",
      "Epoch 00073: val_loss did not improve\n",
      "Epoch 74/100\n",
      "1065/1065 [==============================] - 0s 258us/step - loss: 0.0144 - val_loss: 0.0151\n",
      "\n",
      "Epoch 00074: val_loss did not improve\n",
      "Epoch 75/100\n",
      "1065/1065 [==============================] - 0s 230us/step - loss: 0.0146 - val_loss: 0.0152\n",
      "\n",
      "Epoch 00075: val_loss did not improve\n",
      "Epoch 76/100\n",
      "1065/1065 [==============================] - 0s 243us/step - loss: 0.0145 - val_loss: 0.0152\n",
      "\n",
      "Epoch 00076: val_loss did not improve\n",
      "Epoch 77/100\n",
      "1065/1065 [==============================] - 0s 229us/step - loss: 0.0149 - val_loss: 0.0154\n",
      "\n",
      "Epoch 00077: val_loss did not improve\n",
      "Epoch 78/100\n",
      "1065/1065 [==============================] - 0s 227us/step - loss: 0.0148 - val_loss: 0.0152\n",
      "\n",
      "Epoch 00078: val_loss did not improve\n",
      "Epoch 79/100\n",
      "1065/1065 [==============================] - 0s 222us/step - loss: 0.0147 - val_loss: 0.0156\n",
      "\n",
      "Epoch 00079: val_loss did not improve\n",
      "Epoch 80/100\n",
      "1065/1065 [==============================] - 0s 226us/step - loss: 0.0147 - val_loss: 0.0152\n",
      "\n",
      "Epoch 00080: val_loss did not improve\n",
      "Epoch 81/100\n",
      "1065/1065 [==============================] - 0s 229us/step - loss: 0.0145 - val_loss: 0.0154\n",
      "\n",
      "Epoch 00081: val_loss did not improve\n",
      "Epoch 82/100\n",
      "1065/1065 [==============================] - 0s 221us/step - loss: 0.0142 - val_loss: 0.0151\n",
      "\n",
      "Epoch 00082: val_loss did not improve\n",
      "Epoch 83/100\n",
      "1065/1065 [==============================] - 0s 224us/step - loss: 0.0146 - val_loss: 0.0151\n",
      "\n",
      "Epoch 00083: val_loss did not improve\n",
      "Epoch 84/100\n",
      "1065/1065 [==============================] - 0s 239us/step - loss: 0.0144 - val_loss: 0.0155\n",
      "\n",
      "Epoch 00084: val_loss did not improve\n",
      "Epoch 85/100\n",
      "1065/1065 [==============================] - 0s 235us/step - loss: 0.0148 - val_loss: 0.0157\n",
      "\n",
      "Epoch 00085: val_loss did not improve\n",
      "Epoch 86/100\n",
      "1065/1065 [==============================] - 0s 224us/step - loss: 0.0146 - val_loss: 0.0149\n",
      "\n",
      "Epoch 00086: val_loss did not improve\n",
      "Epoch 87/100\n",
      "1065/1065 [==============================] - 0s 219us/step - loss: 0.0146 - val_loss: 0.0170\n",
      "\n",
      "Epoch 00087: val_loss did not improve\n",
      "Epoch 88/100\n",
      "1065/1065 [==============================] - 0s 236us/step - loss: 0.0148 - val_loss: 0.0155\n",
      "\n",
      "Epoch 00088: val_loss did not improve\n",
      "Epoch 89/100\n",
      "1065/1065 [==============================] - 0s 221us/step - loss: 0.0144 - val_loss: 0.0158\n",
      "\n",
      "Epoch 00089: val_loss did not improve\n",
      "Epoch 90/100\n",
      "1065/1065 [==============================] - 0s 239us/step - loss: 0.0150 - val_loss: 0.0159\n",
      "\n",
      "Epoch 00090: val_loss did not improve\n",
      "Epoch 91/100\n",
      "1065/1065 [==============================] - 0s 235us/step - loss: 0.0147 - val_loss: 0.0156\n",
      "\n",
      "Epoch 00091: val_loss did not improve\n",
      "Epoch 92/100\n",
      "1065/1065 [==============================] - 0s 257us/step - loss: 0.0144 - val_loss: 0.0153\n",
      "\n",
      "Epoch 00092: val_loss did not improve\n",
      "Epoch 93/100\n",
      "1065/1065 [==============================] - 0s 230us/step - loss: 0.0144 - val_loss: 0.0149\n",
      "\n",
      "Epoch 00093: val_loss did not improve\n",
      "Epoch 94/100\n",
      "1065/1065 [==============================] - 0s 233us/step - loss: 0.0144 - val_loss: 0.0149\n",
      "\n",
      "Epoch 00094: val_loss did not improve\n",
      "Epoch 95/100\n",
      "1065/1065 [==============================] - 0s 238us/step - loss: 0.0145 - val_loss: 0.0150\n",
      "\n",
      "Epoch 00095: val_loss did not improve\n",
      "Epoch 96/100\n",
      "1065/1065 [==============================] - 0s 231us/step - loss: 0.0147 - val_loss: 0.0154\n",
      "\n",
      "Epoch 00096: val_loss did not improve\n",
      "Epoch 97/100\n",
      "1065/1065 [==============================] - 0s 234us/step - loss: 0.0144 - val_loss: 0.0154\n",
      "\n",
      "Epoch 00097: val_loss did not improve\n",
      "Epoch 98/100\n",
      "1065/1065 [==============================] - 0s 234us/step - loss: 0.0144 - val_loss: 0.0155\n",
      "\n",
      "Epoch 00098: val_loss did not improve\n",
      "Epoch 99/100\n",
      "1065/1065 [==============================] - 0s 237us/step - loss: 0.0142 - val_loss: 0.0149\n",
      "\n",
      "Epoch 00099: val_loss did not improve\n",
      "Epoch 100/100\n",
      "1065/1065 [==============================] - 0s 248us/step - loss: 0.0139 - val_loss: 0.0151\n",
      "\n",
      "Epoch 00100: val_loss did not improve\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0x1094a62b0>"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#train the VAE model\n",
    "vae_model.vae.fit(X_train, X_train,validation_data=(X_test, X_test), batch_size=batches, \n",
    "                  epochs=epoch,callbacks=[checkpointer], verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[  1.22240408e-05,   7.67572224e-01,   6.65617809e-02,\n",
       "          3.49267611e-05,   3.47130746e-03,   8.67386058e-04,\n",
       "          5.86303067e-04,   5.93868159e-02,   1.03502418e-03,\n",
       "          3.13355587e-02,   8.40592489e-04,   9.04102926e-04,\n",
       "          3.91140813e-04]], dtype=float32)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#testing of the model\n",
    "x = x = np.array([0.0,0.6,0.0,0.0,0.0,0.89,0.0,0.0,0.0,0.0,0.0,0.0,0.0]).reshape(-1,13)\n",
    "vae_model.vae.predict(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1420, 1)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vae_model.vae.load_weights('model_weights/weights.vae.h5')\n",
    "#vae_model.vae.trainable = False\n",
    "#vae_model.encoder.trainable = False\n",
    "#vae_model.decoder.trainable = False\n",
    "vae_model.stddev = 1.0\n",
    "y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "encoder_input (InputLayer)   (None, 13)                0         \n",
      "_________________________________________________________________\n",
      "encoder (Model)              [(None, 2), (None, 2), (N 43268     \n",
      "_________________________________________________________________\n",
      "decoder (Model)              (None, 13)                42765     \n",
      "_________________________________________________________________\n",
      "dense7 (Dense)               (None, 128)               1792      \n",
      "_________________________________________________________________\n",
      "column (Dense)               (None, 23)                2967      \n",
      "=================================================================\n",
      "Total params: 90,792\n",
      "Trainable params: 90,792\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "#predicting the columns using the VAE model with the output being the column \n",
    "vae_model_2 = VAE(X.shape[1])\n",
    "l = vae_model_2.vae.output\n",
    "l = layers.Dense(128, activation=\"relu\",name='dense7')(l)\n",
    "l.trainable = True\n",
    "predictions = layers.Dense(total_cols, activation=\"softmax\",name='column')(l)\n",
    "predictions.trainable = True\n",
    "\n",
    "# creating the final model \n",
    "col_model = models.Model(vae_model_2.vae.inputs, predictions)\n",
    "col_model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#commpile the column predicting model\n",
    "batches = 20#batch size\n",
    "epoch = 100#number of epochs\n",
    "checkpointer = ModelCheckpoint(filepath='model_weights/weights.vae_col.h5', \n",
    "                              verbose=1, save_best_only=True)\n",
    "\n",
    "col_model.compile(optimizer='adam', loss='categorical_crossentropy',metrics=['mae', 'categorical_accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 1065 samples, validate on 355 samples\n",
      "Epoch 1/100\n",
      "1065/1065 [==============================] - 1s 811us/step - loss: 2.8334 - mean_absolute_error: 0.0810 - categorical_accuracy: 0.1202 - val_loss: 2.6050 - val_mean_absolute_error: 0.0795 - val_categorical_accuracy: 0.1408\n",
      "\n",
      "Epoch 00001: val_loss improved from inf to 2.60502, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 2/100\n",
      "1065/1065 [==============================] - 0s 256us/step - loss: 2.5535 - mean_absolute_error: 0.0785 - categorical_accuracy: 0.1286 - val_loss: 2.4641 - val_mean_absolute_error: 0.0774 - val_categorical_accuracy: 0.1408\n",
      "\n",
      "Epoch 00002: val_loss improved from 2.60502 to 2.46414, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 3/100\n",
      "1065/1065 [==============================] - 0s 259us/step - loss: 2.3774 - mean_absolute_error: 0.0764 - categorical_accuracy: 0.1906 - val_loss: 2.2067 - val_mean_absolute_error: 0.0743 - val_categorical_accuracy: 0.2479\n",
      "\n",
      "Epoch 00003: val_loss improved from 2.46414 to 2.20668, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 4/100\n",
      "1065/1065 [==============================] - 0s 246us/step - loss: 2.2015 - mean_absolute_error: 0.0742 - categorical_accuracy: 0.2272 - val_loss: 2.0934 - val_mean_absolute_error: 0.0731 - val_categorical_accuracy: 0.2563\n",
      "\n",
      "Epoch 00004: val_loss improved from 2.20668 to 2.09339, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 5/100\n",
      "1065/1065 [==============================] - 0s 244us/step - loss: 2.0935 - mean_absolute_error: 0.0730 - categorical_accuracy: 0.2423 - val_loss: 1.9806 - val_mean_absolute_error: 0.0717 - val_categorical_accuracy: 0.2986\n",
      "\n",
      "Epoch 00005: val_loss improved from 2.09339 to 1.98057, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 6/100\n",
      "1065/1065 [==============================] - 0s 233us/step - loss: 1.9616 - mean_absolute_error: 0.0711 - categorical_accuracy: 0.2930 - val_loss: 1.9658 - val_mean_absolute_error: 0.0714 - val_categorical_accuracy: 0.2451\n",
      "\n",
      "Epoch 00006: val_loss improved from 1.98057 to 1.96582, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 7/100\n",
      "1065/1065 [==============================] - 0s 256us/step - loss: 1.9104 - mean_absolute_error: 0.0706 - categorical_accuracy: 0.2789 - val_loss: 1.8569 - val_mean_absolute_error: 0.0696 - val_categorical_accuracy: 0.2761\n",
      "\n",
      "Epoch 00007: val_loss improved from 1.96582 to 1.85685, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 8/100\n",
      "1065/1065 [==============================] - 0s 245us/step - loss: 1.8786 - mean_absolute_error: 0.0697 - categorical_accuracy: 0.2845 - val_loss: 1.8325 - val_mean_absolute_error: 0.0696 - val_categorical_accuracy: 0.2789\n",
      "\n",
      "Epoch 00008: val_loss improved from 1.85685 to 1.83248, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 9/100\n",
      "1065/1065 [==============================] - 0s 248us/step - loss: 1.8453 - mean_absolute_error: 0.0696 - categorical_accuracy: 0.2995 - val_loss: 1.8169 - val_mean_absolute_error: 0.0690 - val_categorical_accuracy: 0.3042\n",
      "\n",
      "Epoch 00009: val_loss improved from 1.83248 to 1.81695, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 10/100\n",
      "1065/1065 [==============================] - 0s 253us/step - loss: 1.8160 - mean_absolute_error: 0.0688 - categorical_accuracy: 0.2977 - val_loss: 1.7986 - val_mean_absolute_error: 0.0688 - val_categorical_accuracy: 0.3183\n",
      "\n",
      "Epoch 00010: val_loss improved from 1.81695 to 1.79860, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 11/100\n",
      "1065/1065 [==============================] - 0s 247us/step - loss: 1.7904 - mean_absolute_error: 0.0688 - categorical_accuracy: 0.3146 - val_loss: 1.8460 - val_mean_absolute_error: 0.0691 - val_categorical_accuracy: 0.2732\n",
      "\n",
      "Epoch 00011: val_loss did not improve\n",
      "Epoch 12/100\n",
      "1065/1065 [==============================] - 0s 254us/step - loss: 1.7907 - mean_absolute_error: 0.0685 - categorical_accuracy: 0.3174 - val_loss: 1.7712 - val_mean_absolute_error: 0.0684 - val_categorical_accuracy: 0.3211\n",
      "\n",
      "Epoch 00012: val_loss improved from 1.79860 to 1.77119, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 13/100\n",
      "1065/1065 [==============================] - 0s 245us/step - loss: 1.7588 - mean_absolute_error: 0.0681 - categorical_accuracy: 0.3164 - val_loss: 1.7493 - val_mean_absolute_error: 0.0676 - val_categorical_accuracy: 0.3183\n",
      "\n",
      "Epoch 00013: val_loss improved from 1.77119 to 1.74935, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 14/100\n",
      "1065/1065 [==============================] - 0s 256us/step - loss: 1.7422 - mean_absolute_error: 0.0675 - categorical_accuracy: 0.3239 - val_loss: 1.7412 - val_mean_absolute_error: 0.0675 - val_categorical_accuracy: 0.3042\n",
      "\n",
      "Epoch 00014: val_loss improved from 1.74935 to 1.74123, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 15/100\n",
      "1065/1065 [==============================] - 0s 230us/step - loss: 1.7306 - mean_absolute_error: 0.0679 - categorical_accuracy: 0.3061 - val_loss: 1.7545 - val_mean_absolute_error: 0.0677 - val_categorical_accuracy: 0.2986\n",
      "\n",
      "Epoch 00015: val_loss did not improve\n",
      "Epoch 16/100\n",
      "1065/1065 [==============================] - 0s 241us/step - loss: 1.7137 - mean_absolute_error: 0.0672 - categorical_accuracy: 0.3296 - val_loss: 1.7420 - val_mean_absolute_error: 0.0677 - val_categorical_accuracy: 0.2901\n",
      "\n",
      "Epoch 00016: val_loss did not improve\n",
      "Epoch 17/100\n",
      "1065/1065 [==============================] - 0s 241us/step - loss: 1.6963 - mean_absolute_error: 0.0669 - categorical_accuracy: 0.3333 - val_loss: 1.7080 - val_mean_absolute_error: 0.0670 - val_categorical_accuracy: 0.3296\n",
      "\n",
      "Epoch 00017: val_loss improved from 1.74123 to 1.70800, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 18/100\n",
      "1065/1065 [==============================] - 0s 253us/step - loss: 1.6825 - mean_absolute_error: 0.0667 - categorical_accuracy: 0.3455 - val_loss: 1.7080 - val_mean_absolute_error: 0.0670 - val_categorical_accuracy: 0.3352\n",
      "\n",
      "Epoch 00018: val_loss did not improve\n",
      "Epoch 19/100\n",
      "1065/1065 [==============================] - 0s 241us/step - loss: 1.6743 - mean_absolute_error: 0.0666 - categorical_accuracy: 0.3390 - val_loss: 1.6939 - val_mean_absolute_error: 0.0668 - val_categorical_accuracy: 0.3014\n",
      "\n",
      "Epoch 00019: val_loss improved from 1.70800 to 1.69388, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 20/100\n",
      "1065/1065 [==============================] - 0s 243us/step - loss: 1.6578 - mean_absolute_error: 0.0663 - categorical_accuracy: 0.3465 - val_loss: 1.6875 - val_mean_absolute_error: 0.0666 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00020: val_loss improved from 1.69388 to 1.68748, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 21/100\n",
      "1065/1065 [==============================] - 0s 251us/step - loss: 1.6498 - mean_absolute_error: 0.0662 - categorical_accuracy: 0.3343 - val_loss: 1.6689 - val_mean_absolute_error: 0.0662 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00021: val_loss improved from 1.68748 to 1.66886, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 22/100\n",
      "1065/1065 [==============================] - 0s 250us/step - loss: 1.6496 - mean_absolute_error: 0.0661 - categorical_accuracy: 0.3521 - val_loss: 1.6747 - val_mean_absolute_error: 0.0666 - val_categorical_accuracy: 0.3352\n",
      "\n",
      "Epoch 00022: val_loss did not improve\n",
      "Epoch 23/100\n",
      "1065/1065 [==============================] - 0s 261us/step - loss: 1.6428 - mean_absolute_error: 0.0661 - categorical_accuracy: 0.3455 - val_loss: 1.6526 - val_mean_absolute_error: 0.0658 - val_categorical_accuracy: 0.3268\n",
      "\n",
      "Epoch 00023: val_loss improved from 1.66886 to 1.65256, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 24/100\n",
      "1065/1065 [==============================] - 0s 242us/step - loss: 1.6355 - mean_absolute_error: 0.0657 - categorical_accuracy: 0.3521 - val_loss: 1.6657 - val_mean_absolute_error: 0.0660 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00024: val_loss did not improve\n",
      "Epoch 25/100\n",
      "1065/1065 [==============================] - 0s 238us/step - loss: 1.6212 - mean_absolute_error: 0.0655 - categorical_accuracy: 0.3531 - val_loss: 1.6694 - val_mean_absolute_error: 0.0668 - val_categorical_accuracy: 0.3324\n",
      "\n",
      "Epoch 00025: val_loss did not improve\n",
      "Epoch 26/100\n",
      "1065/1065 [==============================] - 0s 249us/step - loss: 1.6713 - mean_absolute_error: 0.0666 - categorical_accuracy: 0.3380 - val_loss: 1.6810 - val_mean_absolute_error: 0.0660 - val_categorical_accuracy: 0.3324\n",
      "\n",
      "Epoch 00026: val_loss did not improve\n",
      "Epoch 27/100\n",
      "1065/1065 [==============================] - 0s 254us/step - loss: 1.6271 - mean_absolute_error: 0.0655 - categorical_accuracy: 0.3371 - val_loss: 1.7398 - val_mean_absolute_error: 0.0678 - val_categorical_accuracy: 0.3042\n",
      "\n",
      "Epoch 00027: val_loss did not improve\n",
      "Epoch 28/100\n",
      "1065/1065 [==============================] - 0s 259us/step - loss: 1.6448 - mean_absolute_error: 0.0656 - categorical_accuracy: 0.3568 - val_loss: 1.6526 - val_mean_absolute_error: 0.0663 - val_categorical_accuracy: 0.3239\n",
      "\n",
      "Epoch 00028: val_loss improved from 1.65256 to 1.65256, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 29/100\n",
      "1065/1065 [==============================] - 0s 255us/step - loss: 1.6057 - mean_absolute_error: 0.0655 - categorical_accuracy: 0.3624 - val_loss: 1.6838 - val_mean_absolute_error: 0.0650 - val_categorical_accuracy: 0.3437\n",
      "\n",
      "Epoch 00029: val_loss did not improve\n",
      "Epoch 30/100\n",
      "1065/1065 [==============================] - 0s 264us/step - loss: 1.6154 - mean_absolute_error: 0.0650 - categorical_accuracy: 0.3549 - val_loss: 1.6448 - val_mean_absolute_error: 0.0657 - val_categorical_accuracy: 0.3437\n",
      "\n",
      "Epoch 00030: val_loss improved from 1.65256 to 1.64478, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 31/100\n",
      "1065/1065 [==============================] - 0s 304us/step - loss: 1.6088 - mean_absolute_error: 0.0649 - categorical_accuracy: 0.3606 - val_loss: 1.6484 - val_mean_absolute_error: 0.0661 - val_categorical_accuracy: 0.3408\n",
      "\n",
      "Epoch 00031: val_loss did not improve\n",
      "Epoch 32/100\n",
      "1065/1065 [==============================] - 0s 279us/step - loss: 1.6026 - mean_absolute_error: 0.0649 - categorical_accuracy: 0.3606 - val_loss: 1.6554 - val_mean_absolute_error: 0.0656 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00032: val_loss did not improve\n",
      "Epoch 33/100\n",
      "1065/1065 [==============================] - 0s 295us/step - loss: 1.5937 - mean_absolute_error: 0.0647 - categorical_accuracy: 0.3549 - val_loss: 1.6792 - val_mean_absolute_error: 0.0657 - val_categorical_accuracy: 0.3380\n",
      "\n",
      "Epoch 00033: val_loss did not improve\n",
      "Epoch 34/100\n",
      "1065/1065 [==============================] - 0s 290us/step - loss: 1.6152 - mean_absolute_error: 0.0649 - categorical_accuracy: 0.3474 - val_loss: 1.6620 - val_mean_absolute_error: 0.0658 - val_categorical_accuracy: 0.3352\n",
      "\n",
      "Epoch 00034: val_loss did not improve\n",
      "Epoch 35/100\n",
      "1065/1065 [==============================] - 0s 266us/step - loss: 1.5855 - mean_absolute_error: 0.0646 - categorical_accuracy: 0.3671 - val_loss: 1.6315 - val_mean_absolute_error: 0.0657 - val_categorical_accuracy: 0.3437\n",
      "\n",
      "Epoch 00035: val_loss improved from 1.64478 to 1.63153, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 36/100\n",
      "1065/1065 [==============================] - 0s 241us/step - loss: 1.5880 - mean_absolute_error: 0.0647 - categorical_accuracy: 0.3502 - val_loss: 1.6520 - val_mean_absolute_error: 0.0650 - val_categorical_accuracy: 0.3437\n",
      "\n",
      "Epoch 00036: val_loss did not improve\n",
      "Epoch 37/100\n",
      "1065/1065 [==============================] - 0s 258us/step - loss: 1.5816 - mean_absolute_error: 0.0643 - categorical_accuracy: 0.3606 - val_loss: 1.6432 - val_mean_absolute_error: 0.0655 - val_categorical_accuracy: 0.3437\n",
      "\n",
      "Epoch 00037: val_loss did not improve\n",
      "Epoch 38/100\n",
      "1065/1065 [==============================] - 0s 243us/step - loss: 1.5982 - mean_absolute_error: 0.0643 - categorical_accuracy: 0.3465 - val_loss: 1.6221 - val_mean_absolute_error: 0.0647 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00038: val_loss improved from 1.63153 to 1.62206, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 39/100\n",
      "1065/1065 [==============================] - 0s 259us/step - loss: 1.5936 - mean_absolute_error: 0.0647 - categorical_accuracy: 0.3549 - val_loss: 1.6220 - val_mean_absolute_error: 0.0644 - val_categorical_accuracy: 0.3690\n",
      "\n",
      "Epoch 00039: val_loss improved from 1.62206 to 1.62199, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 40/100\n",
      "1065/1065 [==============================] - 0s 263us/step - loss: 1.5823 - mean_absolute_error: 0.0642 - categorical_accuracy: 0.3643 - val_loss: 1.6392 - val_mean_absolute_error: 0.0651 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00040: val_loss did not improve\n",
      "Epoch 41/100\n",
      "1065/1065 [==============================] - 0s 256us/step - loss: 1.6049 - mean_absolute_error: 0.0647 - categorical_accuracy: 0.3634 - val_loss: 1.6318 - val_mean_absolute_error: 0.0655 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00041: val_loss did not improve\n",
      "Epoch 42/100\n",
      "1065/1065 [==============================] - 0s 251us/step - loss: 1.5709 - mean_absolute_error: 0.0642 - categorical_accuracy: 0.3700 - val_loss: 1.6280 - val_mean_absolute_error: 0.0644 - val_categorical_accuracy: 0.3549\n",
      "\n",
      "Epoch 00042: val_loss did not improve\n",
      "Epoch 43/100\n",
      "1065/1065 [==============================] - 0s 254us/step - loss: 1.5656 - mean_absolute_error: 0.0640 - categorical_accuracy: 0.3568 - val_loss: 1.6228 - val_mean_absolute_error: 0.0647 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00043: val_loss did not improve\n",
      "Epoch 44/100\n",
      "1065/1065 [==============================] - 0s 259us/step - loss: 1.5912 - mean_absolute_error: 0.0643 - categorical_accuracy: 0.3559 - val_loss: 1.7085 - val_mean_absolute_error: 0.0670 - val_categorical_accuracy: 0.3127\n",
      "\n",
      "Epoch 00044: val_loss did not improve\n",
      "Epoch 45/100\n",
      "1065/1065 [==============================] - 0s 253us/step - loss: 1.5979 - mean_absolute_error: 0.0645 - categorical_accuracy: 0.3690 - val_loss: 1.6146 - val_mean_absolute_error: 0.0648 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00045: val_loss improved from 1.62199 to 1.61465, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 46/100\n",
      "1065/1065 [==============================] - 0s 260us/step - loss: 1.5961 - mean_absolute_error: 0.0643 - categorical_accuracy: 0.3540 - val_loss: 1.6401 - val_mean_absolute_error: 0.0648 - val_categorical_accuracy: 0.3324\n",
      "\n",
      "Epoch 00046: val_loss did not improve\n",
      "Epoch 47/100\n",
      "1065/1065 [==============================] - 0s 263us/step - loss: 1.5656 - mean_absolute_error: 0.0639 - categorical_accuracy: 0.3634 - val_loss: 1.6169 - val_mean_absolute_error: 0.0649 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00047: val_loss did not improve\n",
      "Epoch 48/100\n",
      "1065/1065 [==============================] - 0s 255us/step - loss: 1.5692 - mean_absolute_error: 0.0642 - categorical_accuracy: 0.3606 - val_loss: 1.6404 - val_mean_absolute_error: 0.0646 - val_categorical_accuracy: 0.3408\n",
      "\n",
      "Epoch 00048: val_loss did not improve\n",
      "Epoch 49/100\n",
      "1065/1065 [==============================] - 0s 244us/step - loss: 1.5667 - mean_absolute_error: 0.0639 - categorical_accuracy: 0.3624 - val_loss: 1.6097 - val_mean_absolute_error: 0.0645 - val_categorical_accuracy: 0.3408\n",
      "\n",
      "Epoch 00049: val_loss improved from 1.61465 to 1.60970, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 50/100\n",
      "1065/1065 [==============================] - 0s 248us/step - loss: 1.5553 - mean_absolute_error: 0.0638 - categorical_accuracy: 0.3643 - val_loss: 1.6264 - val_mean_absolute_error: 0.0644 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00050: val_loss did not improve\n",
      "Epoch 51/100\n",
      "1065/1065 [==============================] - 0s 236us/step - loss: 1.5528 - mean_absolute_error: 0.0638 - categorical_accuracy: 0.3765 - val_loss: 1.6408 - val_mean_absolute_error: 0.0638 - val_categorical_accuracy: 0.3437\n",
      "\n",
      "Epoch 00051: val_loss did not improve\n",
      "Epoch 52/100\n",
      "1065/1065 [==============================] - 0s 273us/step - loss: 1.5553 - mean_absolute_error: 0.0638 - categorical_accuracy: 0.3700 - val_loss: 1.6211 - val_mean_absolute_error: 0.0643 - val_categorical_accuracy: 0.3549\n",
      "\n",
      "Epoch 00052: val_loss did not improve\n",
      "Epoch 53/100\n",
      "1065/1065 [==============================] - 0s 256us/step - loss: 1.5912 - mean_absolute_error: 0.0642 - categorical_accuracy: 0.3559 - val_loss: 1.6235 - val_mean_absolute_error: 0.0649 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00053: val_loss did not improve\n",
      "Epoch 54/100\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1065/1065 [==============================] - 0s 255us/step - loss: 1.5544 - mean_absolute_error: 0.0638 - categorical_accuracy: 0.3831 - val_loss: 1.6226 - val_mean_absolute_error: 0.0645 - val_categorical_accuracy: 0.3690\n",
      "\n",
      "Epoch 00054: val_loss did not improve\n",
      "Epoch 55/100\n",
      "1065/1065 [==============================] - 0s 259us/step - loss: 1.5527 - mean_absolute_error: 0.0637 - categorical_accuracy: 0.3690 - val_loss: 1.6454 - val_mean_absolute_error: 0.0643 - val_categorical_accuracy: 0.3352\n",
      "\n",
      "Epoch 00055: val_loss did not improve\n",
      "Epoch 56/100\n",
      "1065/1065 [==============================] - 0s 266us/step - loss: 1.5479 - mean_absolute_error: 0.0634 - categorical_accuracy: 0.3756 - val_loss: 1.6463 - val_mean_absolute_error: 0.0647 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00056: val_loss did not improve\n",
      "Epoch 57/100\n",
      "1065/1065 [==============================] - 0s 265us/step - loss: 1.5550 - mean_absolute_error: 0.0637 - categorical_accuracy: 0.3718 - val_loss: 1.6345 - val_mean_absolute_error: 0.0646 - val_categorical_accuracy: 0.3408\n",
      "\n",
      "Epoch 00057: val_loss did not improve\n",
      "Epoch 58/100\n",
      "1065/1065 [==============================] - 0s 259us/step - loss: 1.5409 - mean_absolute_error: 0.0634 - categorical_accuracy: 0.3784 - val_loss: 1.6736 - val_mean_absolute_error: 0.0642 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00058: val_loss did not improve\n",
      "Epoch 59/100\n",
      "1065/1065 [==============================] - 0s 251us/step - loss: 1.6549 - mean_absolute_error: 0.0646 - categorical_accuracy: 0.3596 - val_loss: 1.6672 - val_mean_absolute_error: 0.0656 - val_categorical_accuracy: 0.3437\n",
      "\n",
      "Epoch 00059: val_loss did not improve\n",
      "Epoch 60/100\n",
      "1065/1065 [==============================] - 0s 247us/step - loss: 1.5920 - mean_absolute_error: 0.0647 - categorical_accuracy: 0.3634 - val_loss: 1.6573 - val_mean_absolute_error: 0.0652 - val_categorical_accuracy: 0.3775\n",
      "\n",
      "Epoch 00060: val_loss did not improve\n",
      "Epoch 61/100\n",
      "1065/1065 [==============================] - 0s 245us/step - loss: 1.5744 - mean_absolute_error: 0.0641 - categorical_accuracy: 0.3577 - val_loss: 1.6415 - val_mean_absolute_error: 0.0646 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00061: val_loss did not improve\n",
      "Epoch 62/100\n",
      "1065/1065 [==============================] - 0s 243us/step - loss: 1.5491 - mean_absolute_error: 0.0637 - categorical_accuracy: 0.3681 - val_loss: 1.6204 - val_mean_absolute_error: 0.0638 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00062: val_loss did not improve\n",
      "Epoch 63/100\n",
      "1065/1065 [==============================] - 0s 240us/step - loss: 1.5538 - mean_absolute_error: 0.0635 - categorical_accuracy: 0.3681 - val_loss: 1.6249 - val_mean_absolute_error: 0.0637 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00063: val_loss did not improve\n",
      "Epoch 64/100\n",
      "1065/1065 [==============================] - 0s 255us/step - loss: 1.5568 - mean_absolute_error: 0.0637 - categorical_accuracy: 0.3634 - val_loss: 1.6226 - val_mean_absolute_error: 0.0647 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00064: val_loss did not improve\n",
      "Epoch 65/100\n",
      "1065/1065 [==============================] - 0s 263us/step - loss: 1.5306 - mean_absolute_error: 0.0635 - categorical_accuracy: 0.3915 - val_loss: 1.6068 - val_mean_absolute_error: 0.0640 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00065: val_loss improved from 1.60970 to 1.60679, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 66/100\n",
      "1065/1065 [==============================] - 0s 283us/step - loss: 1.5418 - mean_absolute_error: 0.0633 - categorical_accuracy: 0.3671 - val_loss: 1.6126 - val_mean_absolute_error: 0.0640 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00066: val_loss did not improve\n",
      "Epoch 67/100\n",
      "1065/1065 [==============================] - 0s 291us/step - loss: 1.5414 - mean_absolute_error: 0.0633 - categorical_accuracy: 0.3709 - val_loss: 1.6138 - val_mean_absolute_error: 0.0645 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00067: val_loss did not improve\n",
      "Epoch 68/100\n",
      "1065/1065 [==============================] - 0s 301us/step - loss: 1.5294 - mean_absolute_error: 0.0632 - categorical_accuracy: 0.3803 - val_loss: 1.6001 - val_mean_absolute_error: 0.0642 - val_categorical_accuracy: 0.3690\n",
      "\n",
      "Epoch 00068: val_loss improved from 1.60679 to 1.60007, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 69/100\n",
      "1065/1065 [==============================] - 0s 277us/step - loss: 1.5287 - mean_absolute_error: 0.0631 - categorical_accuracy: 0.3934 - val_loss: 1.6102 - val_mean_absolute_error: 0.0639 - val_categorical_accuracy: 0.3606\n",
      "\n",
      "Epoch 00069: val_loss did not improve\n",
      "Epoch 70/100\n",
      "1065/1065 [==============================] - 0s 251us/step - loss: 1.5256 - mean_absolute_error: 0.0630 - categorical_accuracy: 0.3775 - val_loss: 1.6175 - val_mean_absolute_error: 0.0644 - val_categorical_accuracy: 0.3718\n",
      "\n",
      "Epoch 00070: val_loss did not improve\n",
      "Epoch 71/100\n",
      "1065/1065 [==============================] - 0s 256us/step - loss: 1.5208 - mean_absolute_error: 0.0626 - categorical_accuracy: 0.3765 - val_loss: 1.5948 - val_mean_absolute_error: 0.0639 - val_categorical_accuracy: 0.3634\n",
      "\n",
      "Epoch 00071: val_loss improved from 1.60007 to 1.59479, saving model to model_weights/weights.vae_col.h5\n",
      "Epoch 72/100\n",
      "1065/1065 [==============================] - 0s 252us/step - loss: 1.5416 - mean_absolute_error: 0.0632 - categorical_accuracy: 0.3878 - val_loss: 1.6010 - val_mean_absolute_error: 0.0638 - val_categorical_accuracy: 0.3690\n",
      "\n",
      "Epoch 00072: val_loss did not improve\n",
      "Epoch 73/100\n",
      "1065/1065 [==============================] - 0s 249us/step - loss: 1.5278 - mean_absolute_error: 0.0631 - categorical_accuracy: 0.3746 - val_loss: 1.6398 - val_mean_absolute_error: 0.0640 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00073: val_loss did not improve\n",
      "Epoch 74/100\n",
      "1065/1065 [==============================] - 0s 260us/step - loss: 1.5193 - mean_absolute_error: 0.0627 - categorical_accuracy: 0.3878 - val_loss: 1.5961 - val_mean_absolute_error: 0.0639 - val_categorical_accuracy: 0.3718\n",
      "\n",
      "Epoch 00074: val_loss did not improve\n",
      "Epoch 75/100\n",
      "1065/1065 [==============================] - 0s 262us/step - loss: 1.5106 - mean_absolute_error: 0.0629 - categorical_accuracy: 0.3934 - val_loss: 1.6054 - val_mean_absolute_error: 0.0638 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00075: val_loss did not improve\n",
      "Epoch 76/100\n",
      "1065/1065 [==============================] - 0s 258us/step - loss: 1.5309 - mean_absolute_error: 0.0628 - categorical_accuracy: 0.3897 - val_loss: 1.6582 - val_mean_absolute_error: 0.0648 - val_categorical_accuracy: 0.3465\n",
      "\n",
      "Epoch 00076: val_loss did not improve\n",
      "Epoch 77/100\n",
      "1065/1065 [==============================] - 0s 273us/step - loss: 1.5195 - mean_absolute_error: 0.0629 - categorical_accuracy: 0.3897 - val_loss: 1.6081 - val_mean_absolute_error: 0.0639 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00077: val_loss did not improve\n",
      "Epoch 78/100\n",
      "1065/1065 [==============================] - 0s 262us/step - loss: 1.5182 - mean_absolute_error: 0.0629 - categorical_accuracy: 0.3906 - val_loss: 1.6084 - val_mean_absolute_error: 0.0636 - val_categorical_accuracy: 0.3408\n",
      "\n",
      "Epoch 00078: val_loss did not improve\n",
      "Epoch 79/100\n",
      "1065/1065 [==============================] - 0s 257us/step - loss: 1.5062 - mean_absolute_error: 0.0625 - categorical_accuracy: 0.3822 - val_loss: 1.5978 - val_mean_absolute_error: 0.0637 - val_categorical_accuracy: 0.3803\n",
      "\n",
      "Epoch 00079: val_loss did not improve\n",
      "Epoch 80/100\n",
      "1065/1065 [==============================] - 0s 251us/step - loss: 1.5339 - mean_absolute_error: 0.0630 - categorical_accuracy: 0.3869 - val_loss: 1.6410 - val_mean_absolute_error: 0.0636 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00080: val_loss did not improve\n",
      "Epoch 81/100\n",
      "1065/1065 [==============================] - 0s 263us/step - loss: 1.5161 - mean_absolute_error: 0.0631 - categorical_accuracy: 0.3878 - val_loss: 1.6081 - val_mean_absolute_error: 0.0633 - val_categorical_accuracy: 0.3662\n",
      "\n",
      "Epoch 00081: val_loss did not improve\n",
      "Epoch 82/100\n",
      "1065/1065 [==============================] - 0s 258us/step - loss: 1.5299 - mean_absolute_error: 0.0625 - categorical_accuracy: 0.3831 - val_loss: 1.6451 - val_mean_absolute_error: 0.0642 - val_categorical_accuracy: 0.3014\n",
      "\n",
      "Epoch 00082: val_loss did not improve\n",
      "Epoch 83/100\n",
      "1065/1065 [==============================] - 0s 255us/step - loss: 1.5281 - mean_absolute_error: 0.0631 - categorical_accuracy: 0.3690 - val_loss: 1.6025 - val_mean_absolute_error: 0.0632 - val_categorical_accuracy: 0.3634\n",
      "\n",
      "Epoch 00083: val_loss did not improve\n",
      "Epoch 84/100\n",
      "1065/1065 [==============================] - 0s 259us/step - loss: 1.5253 - mean_absolute_error: 0.0626 - categorical_accuracy: 0.3887 - val_loss: 1.6194 - val_mean_absolute_error: 0.0641 - val_categorical_accuracy: 0.3859\n",
      "\n",
      "Epoch 00084: val_loss did not improve\n",
      "Epoch 85/100\n",
      "1065/1065 [==============================] - 0s 263us/step - loss: 1.5309 - mean_absolute_error: 0.0628 - categorical_accuracy: 0.3737 - val_loss: 1.5974 - val_mean_absolute_error: 0.0638 - val_categorical_accuracy: 0.3831\n",
      "\n",
      "Epoch 00085: val_loss did not improve\n",
      "Epoch 86/100\n",
      "1065/1065 [==============================] - 0s 266us/step - loss: 1.5257 - mean_absolute_error: 0.0628 - categorical_accuracy: 0.3822 - val_loss: 1.6086 - val_mean_absolute_error: 0.0638 - val_categorical_accuracy: 0.3606\n",
      "\n",
      "Epoch 00086: val_loss did not improve\n",
      "Epoch 87/100\n",
      "1065/1065 [==============================] - 0s 240us/step - loss: 1.5693 - mean_absolute_error: 0.0630 - categorical_accuracy: 0.3831 - val_loss: 1.6351 - val_mean_absolute_error: 0.0644 - val_categorical_accuracy: 0.3859\n",
      "\n",
      "Epoch 00087: val_loss did not improve\n",
      "Epoch 88/100\n",
      "1065/1065 [==============================] - 0s 243us/step - loss: 1.5313 - mean_absolute_error: 0.0629 - categorical_accuracy: 0.3897 - val_loss: 1.6135 - val_mean_absolute_error: 0.0633 - val_categorical_accuracy: 0.3662\n",
      "\n",
      "Epoch 00088: val_loss did not improve\n",
      "Epoch 89/100\n",
      "1065/1065 [==============================] - 0s 257us/step - loss: 1.5249 - mean_absolute_error: 0.0625 - categorical_accuracy: 0.3878 - val_loss: 1.6115 - val_mean_absolute_error: 0.0634 - val_categorical_accuracy: 0.3831\n",
      "\n",
      "Epoch 00089: val_loss did not improve\n",
      "Epoch 90/100\n",
      "1065/1065 [==============================] - 0s 250us/step - loss: 1.5199 - mean_absolute_error: 0.0625 - categorical_accuracy: 0.3887 - val_loss: 1.6830 - val_mean_absolute_error: 0.0641 - val_categorical_accuracy: 0.3296\n",
      "\n",
      "Epoch 00090: val_loss did not improve\n",
      "Epoch 91/100\n",
      "1065/1065 [==============================] - 0s 271us/step - loss: 1.5576 - mean_absolute_error: 0.0633 - categorical_accuracy: 0.3709 - val_loss: 1.6031 - val_mean_absolute_error: 0.0643 - val_categorical_accuracy: 0.3634\n",
      "\n",
      "Epoch 00091: val_loss did not improve\n",
      "Epoch 92/100\n",
      "1065/1065 [==============================] - 0s 250us/step - loss: 1.5305 - mean_absolute_error: 0.0628 - categorical_accuracy: 0.3831 - val_loss: 1.6239 - val_mean_absolute_error: 0.0634 - val_categorical_accuracy: 0.3634\n",
      "\n",
      "Epoch 00092: val_loss did not improve\n",
      "Epoch 93/100\n",
      "1065/1065 [==============================] - 0s 260us/step - loss: 1.5008 - mean_absolute_error: 0.0621 - categorical_accuracy: 0.3831 - val_loss: 1.6429 - val_mean_absolute_error: 0.0640 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00093: val_loss did not improve\n",
      "Epoch 94/100\n",
      "1065/1065 [==============================] - 0s 249us/step - loss: 1.5894 - mean_absolute_error: 0.0636 - categorical_accuracy: 0.3643 - val_loss: 1.6639 - val_mean_absolute_error: 0.0653 - val_categorical_accuracy: 0.3296\n",
      "\n",
      "Epoch 00094: val_loss did not improve\n",
      "Epoch 95/100\n",
      "1065/1065 [==============================] - 0s 264us/step - loss: 1.5411 - mean_absolute_error: 0.0636 - categorical_accuracy: 0.3775 - val_loss: 1.6949 - val_mean_absolute_error: 0.0653 - val_categorical_accuracy: 0.3324\n",
      "\n",
      "Epoch 00095: val_loss did not improve\n",
      "Epoch 96/100\n",
      "1065/1065 [==============================] - 0s 269us/step - loss: 1.5532 - mean_absolute_error: 0.0637 - categorical_accuracy: 0.3671 - val_loss: 1.6303 - val_mean_absolute_error: 0.0643 - val_categorical_accuracy: 0.3268\n",
      "\n",
      "Epoch 00096: val_loss did not improve\n",
      "Epoch 97/100\n",
      "1065/1065 [==============================] - 0s 255us/step - loss: 1.5287 - mean_absolute_error: 0.0633 - categorical_accuracy: 0.3737 - val_loss: 1.6958 - val_mean_absolute_error: 0.0646 - val_categorical_accuracy: 0.3155\n",
      "\n",
      "Epoch 00097: val_loss did not improve\n",
      "Epoch 98/100\n",
      "1065/1065 [==============================] - 0s 261us/step - loss: 1.5503 - mean_absolute_error: 0.0638 - categorical_accuracy: 0.3700 - val_loss: 1.6185 - val_mean_absolute_error: 0.0644 - val_categorical_accuracy: 0.3549\n",
      "\n",
      "Epoch 00098: val_loss did not improve\n",
      "Epoch 99/100\n",
      "1065/1065 [==============================] - 0s 252us/step - loss: 1.5140 - mean_absolute_error: 0.0626 - categorical_accuracy: 0.3897 - val_loss: 1.6043 - val_mean_absolute_error: 0.0637 - val_categorical_accuracy: 0.3606\n",
      "\n",
      "Epoch 00099: val_loss did not improve\n",
      "Epoch 100/100\n",
      "1065/1065 [==============================] - 0s 278us/step - loss: 1.5376 - mean_absolute_error: 0.0633 - categorical_accuracy: 0.3634 - val_loss: 1.6139 - val_mean_absolute_error: 0.0635 - val_categorical_accuracy: 0.3690\n",
      "\n",
      "Epoch 00100: val_loss did not improve\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0x1a23500ef0>"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#fit the model\n",
    "col_model.fit(X_train, y_train,validation_data=(X_test, y_test), batch_size=batches, epochs=epoch,\n",
    "                callbacks=[checkpointer], verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import plotly.graph_objs as go\n",
    "import plotly.plotly as py\n",
    "import plotly\n",
    "plotly.tools.set_credentials_file(username='jbp261', api_key='mwLCiXYkEDqs4YuGIRHN')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\" seamless=\"seamless\" src=\"https://plot.ly/~jbp261/2.embed\" height=\"525px\" width=\"100%\"></iframe>"
      ],
      "text/plain": [
       "<plotly.tools.PlotlyDisplay object>"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#plot the distribution of the latenet feature\n",
    "z_mean, _, _ = vae_model.encoder.predict(X_train,\n",
    "                                   batch_size=batches)\n",
    "tt = np.array(tt)\n",
    "trace1 = go.Scatter( x = z_mean[:, 0],\n",
    "    y = z_mean[:, 1],\n",
    "    mode='markers',\n",
    "    marker=dict(\n",
    "        size=16,\n",
    "        color = tt, #set color equal to a variable\n",
    "        colorscale='Viridis',\n",
    "        showscale=True\n",
    "    )\n",
    ")\n",
    "data = [trace1]\n",
    "\n",
    "py.iplot(data, filename='col_z_plot')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "col = np.array([0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.300,0.0,0.0,0.0,0.00]).reshape(-1,13)\n",
    "np.argmax(col_model.predict(col))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1065, 18)"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#devide the data into train test for the model predicting rows\n",
    "y = pd.read_csv('datasets/encoded_rows.csv')\n",
    "#y2 = keras.utils.to_categorical(y, num_classes=total_rows)\n",
    "#x = np.load('datasets/binary_BLE.npy')\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, shuffle=True)\n",
    "tt = y_train\n",
    "zz = y_test\n",
    "y_train = keras.utils.to_categorical(tt, num_classes=total_rows)\n",
    "y_test = keras.utils.to_categorical(zz, num_classes=total_rows)\n",
    "y_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "encoder_input (InputLayer)   (None, 13)                0         \n",
      "_________________________________________________________________\n",
      "encoder (Model)              [(None, 2), (None, 2), (N 43268     \n",
      "_________________________________________________________________\n",
      "decoder (Model)              (None, 13)                42765     \n",
      "_________________________________________________________________\n",
      "dense5 (Dense)               (None, 128)               1792      \n",
      "_________________________________________________________________\n",
      "row (Dense)                  (None, 18)                2322      \n",
      "=================================================================\n",
      "Total params: 90,147\n",
      "Trainable params: 90,147\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "#row predicting model build on the VAE model\n",
    "vae_model_3 = VAE(X.shape[1])\n",
    "l2 = vae_model_3.vae.output\n",
    "l2 = layers.Dense(128, activation=\"relu\",name='dense5')(l2)\n",
    "l2.trainable = True\n",
    "predictions = layers.Dense(total_rows, activation=\"softmax\",name='row')(l2)\n",
    "predictions.trainable = True\n",
    "\n",
    "# creating the final model \n",
    "row_model = models.Model(vae_model_3.vae.inputs, predictions)\n",
    "row_model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#compile the row predicting model\n",
    "checkpointer = ModelCheckpoint(filepath='model_weights/weights.vae_row.h5', \n",
    "                              verbose=1, save_best_only=True)\n",
    "\n",
    "row_model.compile(optimizer='adam', loss='categorical_crossentropy',metrics=['mae', 'categorical_accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 1065 samples, validate on 355 samples\n",
      "Epoch 1/100\n",
      "1065/1065 [==============================] - 1s 850us/step - loss: 2.5550 - mean_absolute_error: 0.1016 - categorical_accuracy: 0.1437 - val_loss: 2.3240 - val_mean_absolute_error: 0.0984 - val_categorical_accuracy: 0.1493\n",
      "\n",
      "Epoch 00001: val_loss improved from inf to 2.32404, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 2/100\n",
      "1065/1065 [==============================] - 0s 234us/step - loss: 2.2134 - mean_absolute_error: 0.0973 - categorical_accuracy: 0.1756 - val_loss: 2.2005 - val_mean_absolute_error: 0.0972 - val_categorical_accuracy: 0.1352\n",
      "\n",
      "Epoch 00002: val_loss improved from 2.32404 to 2.20055, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 3/100\n",
      "1065/1065 [==============================] - 0s 277us/step - loss: 2.0757 - mean_absolute_error: 0.0955 - categorical_accuracy: 0.2131 - val_loss: 1.9887 - val_mean_absolute_error: 0.0938 - val_categorical_accuracy: 0.3070\n",
      "\n",
      "Epoch 00003: val_loss improved from 2.20055 to 1.98865, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 4/100\n",
      "1065/1065 [==============================] - 0s 262us/step - loss: 1.9376 - mean_absolute_error: 0.0926 - categorical_accuracy: 0.2582 - val_loss: 1.8593 - val_mean_absolute_error: 0.0903 - val_categorical_accuracy: 0.3099\n",
      "\n",
      "Epoch 00004: val_loss improved from 1.98865 to 1.85932, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 5/100\n",
      "1065/1065 [==============================] - 0s 273us/step - loss: 1.7969 - mean_absolute_error: 0.0891 - categorical_accuracy: 0.3399 - val_loss: 1.7308 - val_mean_absolute_error: 0.0868 - val_categorical_accuracy: 0.3437\n",
      "\n",
      "Epoch 00005: val_loss improved from 1.85932 to 1.73077, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 6/100\n",
      "1065/1065 [==============================] - 0s 262us/step - loss: 1.6927 - mean_absolute_error: 0.0861 - categorical_accuracy: 0.3643 - val_loss: 1.6626 - val_mean_absolute_error: 0.0853 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00006: val_loss improved from 1.73077 to 1.66264, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 7/100\n",
      "1065/1065 [==============================] - 0s 270us/step - loss: 1.6929 - mean_absolute_error: 0.0860 - categorical_accuracy: 0.3437 - val_loss: 1.6454 - val_mean_absolute_error: 0.0844 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00007: val_loss improved from 1.66264 to 1.64542, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 8/100\n",
      "1065/1065 [==============================] - 0s 265us/step - loss: 1.6198 - mean_absolute_error: 0.0842 - categorical_accuracy: 0.3681 - val_loss: 1.6298 - val_mean_absolute_error: 0.0831 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00008: val_loss improved from 1.64542 to 1.62980, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 9/100\n",
      "1065/1065 [==============================] - 0s 255us/step - loss: 1.6226 - mean_absolute_error: 0.0834 - categorical_accuracy: 0.3549 - val_loss: 1.6256 - val_mean_absolute_error: 0.0837 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00009: val_loss improved from 1.62980 to 1.62559, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 10/100\n",
      "1065/1065 [==============================] - 0s 252us/step - loss: 1.5814 - mean_absolute_error: 0.0826 - categorical_accuracy: 0.3549 - val_loss: 1.5919 - val_mean_absolute_error: 0.0812 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00010: val_loss improved from 1.62559 to 1.59188, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 11/100\n",
      "1065/1065 [==============================] - 0s 256us/step - loss: 1.5636 - mean_absolute_error: 0.0816 - categorical_accuracy: 0.3643 - val_loss: 1.5683 - val_mean_absolute_error: 0.0806 - val_categorical_accuracy: 0.3887\n",
      "\n",
      "Epoch 00011: val_loss improved from 1.59188 to 1.56828, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 12/100\n",
      "1065/1065 [==============================] - 0s 255us/step - loss: 1.5562 - mean_absolute_error: 0.0810 - categorical_accuracy: 0.3728 - val_loss: 1.5618 - val_mean_absolute_error: 0.0805 - val_categorical_accuracy: 0.3662\n",
      "\n",
      "Epoch 00012: val_loss improved from 1.56828 to 1.56175, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 13/100\n",
      "1065/1065 [==============================] - 0s 213us/step - loss: 1.5531 - mean_absolute_error: 0.0812 - categorical_accuracy: 0.3587 - val_loss: 1.5638 - val_mean_absolute_error: 0.0804 - val_categorical_accuracy: 0.3718\n",
      "\n",
      "Epoch 00013: val_loss did not improve\n",
      "Epoch 14/100\n",
      "1065/1065 [==============================] - 0s 224us/step - loss: 1.5528 - mean_absolute_error: 0.0810 - categorical_accuracy: 0.3681 - val_loss: 1.5927 - val_mean_absolute_error: 0.0814 - val_categorical_accuracy: 0.3099\n",
      "\n",
      "Epoch 00014: val_loss did not improve\n",
      "Epoch 15/100\n",
      "1065/1065 [==============================] - 0s 249us/step - loss: 1.5459 - mean_absolute_error: 0.0806 - categorical_accuracy: 0.3803 - val_loss: 1.5481 - val_mean_absolute_error: 0.0786 - val_categorical_accuracy: 0.3915\n",
      "\n",
      "Epoch 00015: val_loss improved from 1.56175 to 1.54813, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 16/100\n",
      "1065/1065 [==============================] - 0s 262us/step - loss: 1.5369 - mean_absolute_error: 0.0803 - categorical_accuracy: 0.3775 - val_loss: 1.5430 - val_mean_absolute_error: 0.0791 - val_categorical_accuracy: 0.3859\n",
      "\n",
      "Epoch 00016: val_loss improved from 1.54813 to 1.54300, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 17/100\n",
      "1065/1065 [==============================] - 0s 239us/step - loss: 1.5312 - mean_absolute_error: 0.0802 - categorical_accuracy: 0.3681 - val_loss: 1.5960 - val_mean_absolute_error: 0.0816 - val_categorical_accuracy: 0.3606\n",
      "\n",
      "Epoch 00017: val_loss did not improve\n",
      "Epoch 18/100\n",
      "1065/1065 [==============================] - 0s 248us/step - loss: 1.5173 - mean_absolute_error: 0.0800 - categorical_accuracy: 0.3793 - val_loss: 1.5444 - val_mean_absolute_error: 0.0789 - val_categorical_accuracy: 0.3803\n",
      "\n",
      "Epoch 00018: val_loss did not improve\n",
      "Epoch 19/100\n",
      "1065/1065 [==============================] - 0s 253us/step - loss: 1.5137 - mean_absolute_error: 0.0797 - categorical_accuracy: 0.3793 - val_loss: 1.5314 - val_mean_absolute_error: 0.0793 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00019: val_loss improved from 1.54300 to 1.53144, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 20/100\n",
      "1065/1065 [==============================] - 0s 250us/step - loss: 1.5236 - mean_absolute_error: 0.0801 - categorical_accuracy: 0.3474 - val_loss: 1.5510 - val_mean_absolute_error: 0.0784 - val_categorical_accuracy: 0.3746\n",
      "\n",
      "Epoch 00020: val_loss did not improve\n",
      "Epoch 21/100\n",
      "1065/1065 [==============================] - 0s 249us/step - loss: 1.5128 - mean_absolute_error: 0.0795 - categorical_accuracy: 0.3671 - val_loss: 1.5539 - val_mean_absolute_error: 0.0788 - val_categorical_accuracy: 0.3831\n",
      "\n",
      "Epoch 00021: val_loss did not improve\n",
      "Epoch 22/100\n",
      "1065/1065 [==============================] - 0s 249us/step - loss: 1.5062 - mean_absolute_error: 0.0798 - categorical_accuracy: 0.3765 - val_loss: 1.5567 - val_mean_absolute_error: 0.0798 - val_categorical_accuracy: 0.3465\n",
      "\n",
      "Epoch 00022: val_loss did not improve\n",
      "Epoch 23/100\n",
      "1065/1065 [==============================] - 0s 255us/step - loss: 1.5226 - mean_absolute_error: 0.0801 - categorical_accuracy: 0.3643 - val_loss: 1.5827 - val_mean_absolute_error: 0.0806 - val_categorical_accuracy: 0.3606\n",
      "\n",
      "Epoch 00023: val_loss did not improve\n",
      "Epoch 24/100\n",
      "1065/1065 [==============================] - 0s 239us/step - loss: 1.5111 - mean_absolute_error: 0.0795 - categorical_accuracy: 0.3728 - val_loss: 1.5501 - val_mean_absolute_error: 0.0794 - val_categorical_accuracy: 0.3746\n",
      "\n",
      "Epoch 00024: val_loss did not improve\n",
      "Epoch 25/100\n",
      "1065/1065 [==============================] - 0s 237us/step - loss: 1.5244 - mean_absolute_error: 0.0800 - categorical_accuracy: 0.3822 - val_loss: 1.6227 - val_mean_absolute_error: 0.0799 - val_categorical_accuracy: 0.3859\n",
      "\n",
      "Epoch 00025: val_loss did not improve\n",
      "Epoch 26/100\n",
      "1065/1065 [==============================] - 0s 248us/step - loss: 1.5256 - mean_absolute_error: 0.0800 - categorical_accuracy: 0.3803 - val_loss: 1.5428 - val_mean_absolute_error: 0.0785 - val_categorical_accuracy: 0.3803\n",
      "\n",
      "Epoch 00026: val_loss did not improve\n",
      "Epoch 27/100\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1065/1065 [==============================] - 0s 239us/step - loss: 1.5108 - mean_absolute_error: 0.0797 - categorical_accuracy: 0.3803 - val_loss: 1.5338 - val_mean_absolute_error: 0.0790 - val_categorical_accuracy: 0.3803\n",
      "\n",
      "Epoch 00027: val_loss did not improve\n",
      "Epoch 28/100\n",
      "1065/1065 [==============================] - 0s 247us/step - loss: 1.5059 - mean_absolute_error: 0.0796 - categorical_accuracy: 0.3756 - val_loss: 1.5417 - val_mean_absolute_error: 0.0790 - val_categorical_accuracy: 0.3803\n",
      "\n",
      "Epoch 00028: val_loss did not improve\n",
      "Epoch 29/100\n",
      "1065/1065 [==============================] - 0s 251us/step - loss: 1.5078 - mean_absolute_error: 0.0793 - categorical_accuracy: 0.3915 - val_loss: 1.5416 - val_mean_absolute_error: 0.0792 - val_categorical_accuracy: 0.3775\n",
      "\n",
      "Epoch 00029: val_loss did not improve\n",
      "Epoch 30/100\n",
      "1065/1065 [==============================] - 0s 271us/step - loss: 1.5150 - mean_absolute_error: 0.0798 - categorical_accuracy: 0.3737 - val_loss: 1.5494 - val_mean_absolute_error: 0.0793 - val_categorical_accuracy: 0.3465\n",
      "\n",
      "Epoch 00030: val_loss did not improve\n",
      "Epoch 31/100\n",
      "1065/1065 [==============================] - 0s 250us/step - loss: 1.5059 - mean_absolute_error: 0.0796 - categorical_accuracy: 0.3831 - val_loss: 1.5340 - val_mean_absolute_error: 0.0793 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00031: val_loss did not improve\n",
      "Epoch 32/100\n",
      "1065/1065 [==============================] - 0s 258us/step - loss: 1.5105 - mean_absolute_error: 0.0797 - categorical_accuracy: 0.3869 - val_loss: 1.5333 - val_mean_absolute_error: 0.0795 - val_categorical_accuracy: 0.3380\n",
      "\n",
      "Epoch 00032: val_loss did not improve\n",
      "Epoch 33/100\n",
      "1065/1065 [==============================] - 0s 269us/step - loss: 1.5117 - mean_absolute_error: 0.0794 - categorical_accuracy: 0.3765 - val_loss: 1.5877 - val_mean_absolute_error: 0.0804 - val_categorical_accuracy: 0.3183\n",
      "\n",
      "Epoch 00033: val_loss did not improve\n",
      "Epoch 34/100\n",
      "1065/1065 [==============================] - 0s 254us/step - loss: 1.5287 - mean_absolute_error: 0.0799 - categorical_accuracy: 0.3803 - val_loss: 1.5401 - val_mean_absolute_error: 0.0785 - val_categorical_accuracy: 0.4028\n",
      "\n",
      "Epoch 00034: val_loss did not improve\n",
      "Epoch 35/100\n",
      "1065/1065 [==============================] - 0s 256us/step - loss: 1.5045 - mean_absolute_error: 0.0796 - categorical_accuracy: 0.3793 - val_loss: 1.5389 - val_mean_absolute_error: 0.0790 - val_categorical_accuracy: 0.3746\n",
      "\n",
      "Epoch 00035: val_loss did not improve\n",
      "Epoch 36/100\n",
      "1065/1065 [==============================] - 0s 216us/step - loss: 1.4983 - mean_absolute_error: 0.0790 - categorical_accuracy: 0.3634 - val_loss: 1.5357 - val_mean_absolute_error: 0.0786 - val_categorical_accuracy: 0.3803\n",
      "\n",
      "Epoch 00036: val_loss did not improve\n",
      "Epoch 37/100\n",
      "1065/1065 [==============================] - 0s 267us/step - loss: 1.5023 - mean_absolute_error: 0.0791 - categorical_accuracy: 0.3653 - val_loss: 1.5495 - val_mean_absolute_error: 0.0797 - val_categorical_accuracy: 0.3465\n",
      "\n",
      "Epoch 00037: val_loss did not improve\n",
      "Epoch 38/100\n",
      "1065/1065 [==============================] - 0s 268us/step - loss: 1.5363 - mean_absolute_error: 0.0801 - categorical_accuracy: 0.3521 - val_loss: 1.5557 - val_mean_absolute_error: 0.0785 - val_categorical_accuracy: 0.3746\n",
      "\n",
      "Epoch 00038: val_loss did not improve\n",
      "Epoch 39/100\n",
      "1065/1065 [==============================] - 0s 274us/step - loss: 1.5093 - mean_absolute_error: 0.0791 - categorical_accuracy: 0.3671 - val_loss: 1.5443 - val_mean_absolute_error: 0.0793 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00039: val_loss did not improve\n",
      "Epoch 40/100\n",
      "1065/1065 [==============================] - 0s 282us/step - loss: 1.4977 - mean_absolute_error: 0.0793 - categorical_accuracy: 0.3775 - val_loss: 1.5446 - val_mean_absolute_error: 0.0792 - val_categorical_accuracy: 0.3380\n",
      "\n",
      "Epoch 00040: val_loss did not improve\n",
      "Epoch 41/100\n",
      "1065/1065 [==============================] - 0s 269us/step - loss: 1.4856 - mean_absolute_error: 0.0791 - categorical_accuracy: 0.3756 - val_loss: 1.5549 - val_mean_absolute_error: 0.0798 - val_categorical_accuracy: 0.3408\n",
      "\n",
      "Epoch 00041: val_loss did not improve\n",
      "Epoch 42/100\n",
      "1065/1065 [==============================] - 0s 267us/step - loss: 1.5023 - mean_absolute_error: 0.0792 - categorical_accuracy: 0.3746 - val_loss: 1.5195 - val_mean_absolute_error: 0.0790 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00042: val_loss improved from 1.53144 to 1.51946, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 43/100\n",
      "1065/1065 [==============================] - 0s 247us/step - loss: 1.4878 - mean_absolute_error: 0.0789 - categorical_accuracy: 0.3700 - val_loss: 1.5304 - val_mean_absolute_error: 0.0781 - val_categorical_accuracy: 0.3380\n",
      "\n",
      "Epoch 00043: val_loss did not improve\n",
      "Epoch 44/100\n",
      "1065/1065 [==============================] - 0s 252us/step - loss: 1.4840 - mean_absolute_error: 0.0789 - categorical_accuracy: 0.3840 - val_loss: 1.5472 - val_mean_absolute_error: 0.0790 - val_categorical_accuracy: 0.3465\n",
      "\n",
      "Epoch 00044: val_loss did not improve\n",
      "Epoch 45/100\n",
      "1065/1065 [==============================] - 0s 250us/step - loss: 1.4890 - mean_absolute_error: 0.0788 - categorical_accuracy: 0.3812 - val_loss: 1.5633 - val_mean_absolute_error: 0.0798 - val_categorical_accuracy: 0.3239\n",
      "\n",
      "Epoch 00045: val_loss did not improve\n",
      "Epoch 46/100\n",
      "1065/1065 [==============================] - 0s 251us/step - loss: 1.5186 - mean_absolute_error: 0.0796 - categorical_accuracy: 0.3596 - val_loss: 1.5529 - val_mean_absolute_error: 0.0792 - val_categorical_accuracy: 0.3718\n",
      "\n",
      "Epoch 00046: val_loss did not improve\n",
      "Epoch 47/100\n",
      "1065/1065 [==============================] - 0s 247us/step - loss: 1.5969 - mean_absolute_error: 0.0809 - categorical_accuracy: 0.3577 - val_loss: 1.5577 - val_mean_absolute_error: 0.0787 - val_categorical_accuracy: 0.3972\n",
      "\n",
      "Epoch 00047: val_loss did not improve\n",
      "Epoch 48/100\n",
      "1065/1065 [==============================] - 0s 255us/step - loss: 1.4900 - mean_absolute_error: 0.0791 - categorical_accuracy: 0.3803 - val_loss: 1.5239 - val_mean_absolute_error: 0.0785 - val_categorical_accuracy: 0.3465\n",
      "\n",
      "Epoch 00048: val_loss did not improve\n",
      "Epoch 49/100\n",
      "1065/1065 [==============================] - 0s 267us/step - loss: 1.4881 - mean_absolute_error: 0.0790 - categorical_accuracy: 0.3812 - val_loss: 1.5458 - val_mean_absolute_error: 0.0794 - val_categorical_accuracy: 0.3268\n",
      "\n",
      "Epoch 00049: val_loss did not improve\n",
      "Epoch 50/100\n",
      "1065/1065 [==============================] - 0s 254us/step - loss: 1.4911 - mean_absolute_error: 0.0790 - categorical_accuracy: 0.3822 - val_loss: 1.5207 - val_mean_absolute_error: 0.0785 - val_categorical_accuracy: 0.3887\n",
      "\n",
      "Epoch 00050: val_loss did not improve\n",
      "Epoch 51/100\n",
      "1065/1065 [==============================] - 0s 252us/step - loss: 1.4894 - mean_absolute_error: 0.0790 - categorical_accuracy: 0.3709 - val_loss: 1.5274 - val_mean_absolute_error: 0.0784 - val_categorical_accuracy: 0.3915\n",
      "\n",
      "Epoch 00051: val_loss did not improve\n",
      "Epoch 52/100\n",
      "1065/1065 [==============================] - 0s 251us/step - loss: 1.4998 - mean_absolute_error: 0.0789 - categorical_accuracy: 0.3840 - val_loss: 1.5112 - val_mean_absolute_error: 0.0789 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00052: val_loss improved from 1.51946 to 1.51124, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 53/100\n",
      "1065/1065 [==============================] - 0s 247us/step - loss: 1.4834 - mean_absolute_error: 0.0791 - categorical_accuracy: 0.3869 - val_loss: 1.5109 - val_mean_absolute_error: 0.0785 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00053: val_loss improved from 1.51124 to 1.51088, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 54/100\n",
      "1065/1065 [==============================] - 0s 247us/step - loss: 1.4817 - mean_absolute_error: 0.0790 - categorical_accuracy: 0.3728 - val_loss: 1.5255 - val_mean_absolute_error: 0.0789 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00054: val_loss did not improve\n",
      "Epoch 55/100\n",
      "1065/1065 [==============================] - 0s 259us/step - loss: 1.4942 - mean_absolute_error: 0.0789 - categorical_accuracy: 0.3765 - val_loss: 1.5329 - val_mean_absolute_error: 0.0785 - val_categorical_accuracy: 0.3268\n",
      "\n",
      "Epoch 00055: val_loss did not improve\n",
      "Epoch 56/100\n",
      "1065/1065 [==============================] - 0s 255us/step - loss: 1.5109 - mean_absolute_error: 0.0795 - categorical_accuracy: 0.3362 - val_loss: 1.5306 - val_mean_absolute_error: 0.0782 - val_categorical_accuracy: 0.3887\n",
      "\n",
      "Epoch 00056: val_loss did not improve\n",
      "Epoch 57/100\n",
      "1065/1065 [==============================] - 0s 267us/step - loss: 1.5096 - mean_absolute_error: 0.0793 - categorical_accuracy: 0.3709 - val_loss: 1.5388 - val_mean_absolute_error: 0.0787 - val_categorical_accuracy: 0.3859\n",
      "\n",
      "Epoch 00057: val_loss did not improve\n",
      "Epoch 58/100\n",
      "1065/1065 [==============================] - 0s 252us/step - loss: 1.5195 - mean_absolute_error: 0.0794 - categorical_accuracy: 0.3746 - val_loss: 1.5897 - val_mean_absolute_error: 0.0808 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00058: val_loss did not improve\n",
      "Epoch 59/100\n",
      "1065/1065 [==============================] - 0s 260us/step - loss: 1.5043 - mean_absolute_error: 0.0790 - categorical_accuracy: 0.3812 - val_loss: 1.5347 - val_mean_absolute_error: 0.0793 - val_categorical_accuracy: 0.3775\n",
      "\n",
      "Epoch 00059: val_loss did not improve\n",
      "Epoch 60/100\n",
      "1065/1065 [==============================] - 0s 256us/step - loss: 1.4941 - mean_absolute_error: 0.0791 - categorical_accuracy: 0.3793 - val_loss: 1.5282 - val_mean_absolute_error: 0.0790 - val_categorical_accuracy: 0.3408\n",
      "\n",
      "Epoch 00060: val_loss did not improve\n",
      "Epoch 61/100\n",
      "1065/1065 [==============================] - 0s 248us/step - loss: 1.4922 - mean_absolute_error: 0.0788 - categorical_accuracy: 0.3756 - val_loss: 1.5122 - val_mean_absolute_error: 0.0786 - val_categorical_accuracy: 0.3662\n",
      "\n",
      "Epoch 00061: val_loss did not improve\n",
      "Epoch 62/100\n",
      "1065/1065 [==============================] - 0s 235us/step - loss: 1.5138 - mean_absolute_error: 0.0791 - categorical_accuracy: 0.3700 - val_loss: 1.5352 - val_mean_absolute_error: 0.0789 - val_categorical_accuracy: 0.4282\n",
      "\n",
      "Epoch 00062: val_loss did not improve\n",
      "Epoch 63/100\n",
      "1065/1065 [==============================] - 0s 252us/step - loss: 1.4831 - mean_absolute_error: 0.0787 - categorical_accuracy: 0.3812 - val_loss: 1.5172 - val_mean_absolute_error: 0.0782 - val_categorical_accuracy: 0.3690\n",
      "\n",
      "Epoch 00063: val_loss did not improve\n",
      "Epoch 64/100\n",
      "1065/1065 [==============================] - 0s 257us/step - loss: 1.4824 - mean_absolute_error: 0.0789 - categorical_accuracy: 0.3568 - val_loss: 1.5368 - val_mean_absolute_error: 0.0780 - val_categorical_accuracy: 0.3718\n",
      "\n",
      "Epoch 00064: val_loss did not improve\n",
      "Epoch 65/100\n",
      "1065/1065 [==============================] - 0s 265us/step - loss: 1.4769 - mean_absolute_error: 0.0785 - categorical_accuracy: 0.3840 - val_loss: 1.5103 - val_mean_absolute_error: 0.0781 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00065: val_loss improved from 1.51088 to 1.51033, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 66/100\n",
      "1065/1065 [==============================] - 0s 247us/step - loss: 1.4742 - mean_absolute_error: 0.0784 - categorical_accuracy: 0.3850 - val_loss: 1.5232 - val_mean_absolute_error: 0.0786 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00066: val_loss did not improve\n",
      "Epoch 67/100\n",
      "1065/1065 [==============================] - 0s 248us/step - loss: 1.4900 - mean_absolute_error: 0.0789 - categorical_accuracy: 0.3728 - val_loss: 1.5226 - val_mean_absolute_error: 0.0784 - val_categorical_accuracy: 0.3775\n",
      "\n",
      "Epoch 00067: val_loss did not improve\n",
      "Epoch 68/100\n",
      "1065/1065 [==============================] - 0s 246us/step - loss: 1.4796 - mean_absolute_error: 0.0785 - categorical_accuracy: 0.3822 - val_loss: 1.5003 - val_mean_absolute_error: 0.0782 - val_categorical_accuracy: 0.3634\n",
      "\n",
      "Epoch 00068: val_loss improved from 1.51033 to 1.50025, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 69/100\n",
      "1065/1065 [==============================] - 0s 241us/step - loss: 1.4759 - mean_absolute_error: 0.0785 - categorical_accuracy: 0.3869 - val_loss: 1.5002 - val_mean_absolute_error: 0.0780 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00069: val_loss improved from 1.50025 to 1.50023, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 70/100\n",
      "1065/1065 [==============================] - 0s 233us/step - loss: 1.4686 - mean_absolute_error: 0.0786 - categorical_accuracy: 0.3756 - val_loss: 1.5213 - val_mean_absolute_error: 0.0778 - val_categorical_accuracy: 0.3859\n",
      "\n",
      "Epoch 00070: val_loss did not improve\n",
      "Epoch 71/100\n",
      "1065/1065 [==============================] - 0s 211us/step - loss: 1.4781 - mean_absolute_error: 0.0781 - categorical_accuracy: 0.3915 - val_loss: 1.5367 - val_mean_absolute_error: 0.0787 - val_categorical_accuracy: 0.3408\n",
      "\n",
      "Epoch 00071: val_loss did not improve\n",
      "Epoch 72/100\n",
      "1065/1065 [==============================] - 0s 238us/step - loss: 1.4835 - mean_absolute_error: 0.0787 - categorical_accuracy: 0.3878 - val_loss: 1.5245 - val_mean_absolute_error: 0.0780 - val_categorical_accuracy: 0.3859\n",
      "\n",
      "Epoch 00072: val_loss did not improve\n",
      "Epoch 73/100\n",
      "1065/1065 [==============================] - 0s 276us/step - loss: 1.4949 - mean_absolute_error: 0.0786 - categorical_accuracy: 0.3869 - val_loss: 1.5162 - val_mean_absolute_error: 0.0784 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00073: val_loss did not improve\n",
      "Epoch 74/100\n",
      "1065/1065 [==============================] - 0s 299us/step - loss: 1.4784 - mean_absolute_error: 0.0786 - categorical_accuracy: 0.3859 - val_loss: 1.5069 - val_mean_absolute_error: 0.0781 - val_categorical_accuracy: 0.3662\n",
      "\n",
      "Epoch 00074: val_loss did not improve\n",
      "Epoch 75/100\n",
      "1065/1065 [==============================] - 0s 302us/step - loss: 1.4697 - mean_absolute_error: 0.0785 - categorical_accuracy: 0.3803 - val_loss: 1.5141 - val_mean_absolute_error: 0.0781 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00075: val_loss did not improve\n",
      "Epoch 76/100\n",
      "1065/1065 [==============================] - 0s 272us/step - loss: 1.4672 - mean_absolute_error: 0.0781 - categorical_accuracy: 0.3840 - val_loss: 1.4946 - val_mean_absolute_error: 0.0774 - val_categorical_accuracy: 0.3662\n",
      "\n",
      "Epoch 00076: val_loss improved from 1.50023 to 1.49462, saving model to model_weights/weights.vae_row.h5\n",
      "Epoch 77/100\n",
      "1065/1065 [==============================] - 0s 260us/step - loss: 1.4808 - mean_absolute_error: 0.0785 - categorical_accuracy: 0.3803 - val_loss: 1.5497 - val_mean_absolute_error: 0.0778 - val_categorical_accuracy: 0.3718\n",
      "\n",
      "Epoch 00077: val_loss did not improve\n",
      "Epoch 78/100\n",
      "1065/1065 [==============================] - ETA: 0s - loss: 1.4902 - mean_absolute_error: 0.0786 - categorical_accuracy: 0.38 - 0s 243us/step - loss: 1.4884 - mean_absolute_error: 0.0786 - categorical_accuracy: 0.3831 - val_loss: 1.5173 - val_mean_absolute_error: 0.0783 - val_categorical_accuracy: 0.3775\n",
      "\n",
      "Epoch 00078: val_loss did not improve\n",
      "Epoch 79/100\n",
      "1065/1065 [==============================] - 0s 242us/step - loss: 1.4741 - mean_absolute_error: 0.0787 - categorical_accuracy: 0.3869 - val_loss: 1.5402 - val_mean_absolute_error: 0.0781 - val_categorical_accuracy: 0.3690\n",
      "\n",
      "Epoch 00079: val_loss did not improve\n",
      "Epoch 80/100\n",
      "1065/1065 [==============================] - 0s 240us/step - loss: 1.4936 - mean_absolute_error: 0.0787 - categorical_accuracy: 0.3756 - val_loss: 1.5375 - val_mean_absolute_error: 0.0789 - val_categorical_accuracy: 0.3887\n",
      "\n",
      "Epoch 00080: val_loss did not improve\n",
      "Epoch 81/100\n",
      "1065/1065 [==============================] - 0s 243us/step - loss: 1.4916 - mean_absolute_error: 0.0790 - categorical_accuracy: 0.3859 - val_loss: 1.5086 - val_mean_absolute_error: 0.0785 - val_categorical_accuracy: 0.3521\n",
      "\n",
      "Epoch 00081: val_loss did not improve\n",
      "Epoch 82/100\n",
      "1065/1065 [==============================] - 0s 247us/step - loss: 1.4696 - mean_absolute_error: 0.0784 - categorical_accuracy: 0.3915 - val_loss: 1.4973 - val_mean_absolute_error: 0.0780 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00082: val_loss did not improve\n",
      "Epoch 83/100\n",
      "1065/1065 [==============================] - 0s 237us/step - loss: 1.4809 - mean_absolute_error: 0.0789 - categorical_accuracy: 0.3869 - val_loss: 1.4994 - val_mean_absolute_error: 0.0779 - val_categorical_accuracy: 0.3690\n",
      "\n",
      "Epoch 00083: val_loss did not improve\n",
      "Epoch 84/100\n",
      "1065/1065 [==============================] - 0s 239us/step - loss: 1.4856 - mean_absolute_error: 0.0787 - categorical_accuracy: 0.3944 - val_loss: 1.5082 - val_mean_absolute_error: 0.0777 - val_categorical_accuracy: 0.3606\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Epoch 00084: val_loss did not improve\n",
      "Epoch 85/100\n",
      "1065/1065 [==============================] - 0s 245us/step - loss: 1.4747 - mean_absolute_error: 0.0781 - categorical_accuracy: 0.3765 - val_loss: 1.5202 - val_mean_absolute_error: 0.0789 - val_categorical_accuracy: 0.3465\n",
      "\n",
      "Epoch 00085: val_loss did not improve\n",
      "Epoch 86/100\n",
      "1065/1065 [==============================] - 0s 244us/step - loss: 1.4806 - mean_absolute_error: 0.0788 - categorical_accuracy: 0.3700 - val_loss: 1.5890 - val_mean_absolute_error: 0.0803 - val_categorical_accuracy: 0.3465\n",
      "\n",
      "Epoch 00086: val_loss did not improve\n",
      "Epoch 87/100\n",
      "1065/1065 [==============================] - ETA: 0s - loss: 1.5009 - mean_absolute_error: 0.0789 - categorical_accuracy: 0.36 - 0s 239us/step - loss: 1.4910 - mean_absolute_error: 0.0786 - categorical_accuracy: 0.3718 - val_loss: 1.5033 - val_mean_absolute_error: 0.0780 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00087: val_loss did not improve\n",
      "Epoch 88/100\n",
      "1065/1065 [==============================] - 0s 261us/step - loss: 1.4704 - mean_absolute_error: 0.0779 - categorical_accuracy: 0.3869 - val_loss: 1.5286 - val_mean_absolute_error: 0.0785 - val_categorical_accuracy: 0.3493\n",
      "\n",
      "Epoch 00088: val_loss did not improve\n",
      "Epoch 89/100\n",
      "1065/1065 [==============================] - 0s 237us/step - loss: 1.4852 - mean_absolute_error: 0.0786 - categorical_accuracy: 0.3906 - val_loss: 1.5314 - val_mean_absolute_error: 0.0781 - val_categorical_accuracy: 0.3296\n",
      "\n",
      "Epoch 00089: val_loss did not improve\n",
      "Epoch 90/100\n",
      "1065/1065 [==============================] - 0s 250us/step - loss: 1.4643 - mean_absolute_error: 0.0781 - categorical_accuracy: 0.3887 - val_loss: 1.5002 - val_mean_absolute_error: 0.0780 - val_categorical_accuracy: 0.3775\n",
      "\n",
      "Epoch 00090: val_loss did not improve\n",
      "Epoch 91/100\n",
      "1065/1065 [==============================] - 0s 251us/step - loss: 1.4560 - mean_absolute_error: 0.0780 - categorical_accuracy: 0.3775 - val_loss: 1.4979 - val_mean_absolute_error: 0.0781 - val_categorical_accuracy: 0.3718\n",
      "\n",
      "Epoch 00091: val_loss did not improve\n",
      "Epoch 92/100\n",
      "1065/1065 [==============================] - 0s 239us/step - loss: 1.4582 - mean_absolute_error: 0.0779 - categorical_accuracy: 0.3944 - val_loss: 1.5039 - val_mean_absolute_error: 0.0776 - val_categorical_accuracy: 0.3634\n",
      "\n",
      "Epoch 00092: val_loss did not improve\n",
      "Epoch 93/100\n",
      "1065/1065 [==============================] - 0s 253us/step - loss: 1.4555 - mean_absolute_error: 0.0780 - categorical_accuracy: 0.3869 - val_loss: 1.5067 - val_mean_absolute_error: 0.0776 - val_categorical_accuracy: 0.3577\n",
      "\n",
      "Epoch 00093: val_loss did not improve\n",
      "Epoch 94/100\n",
      "1065/1065 [==============================] - 0s 246us/step - loss: 1.4542 - mean_absolute_error: 0.0778 - categorical_accuracy: 0.3953 - val_loss: 1.5110 - val_mean_absolute_error: 0.0782 - val_categorical_accuracy: 0.3549\n",
      "\n",
      "Epoch 00094: val_loss did not improve\n",
      "Epoch 95/100\n",
      "1065/1065 [==============================] - 0s 249us/step - loss: 1.4576 - mean_absolute_error: 0.0779 - categorical_accuracy: 0.3981 - val_loss: 1.5118 - val_mean_absolute_error: 0.0776 - val_categorical_accuracy: 0.3634\n",
      "\n",
      "Epoch 00095: val_loss did not improve\n",
      "Epoch 96/100\n",
      "1065/1065 [==============================] - 0s 238us/step - loss: 1.4591 - mean_absolute_error: 0.0782 - categorical_accuracy: 0.3859 - val_loss: 1.5046 - val_mean_absolute_error: 0.0779 - val_categorical_accuracy: 0.3662\n",
      "\n",
      "Epoch 00096: val_loss did not improve\n",
      "Epoch 97/100\n",
      "1065/1065 [==============================] - 0s 268us/step - loss: 1.4528 - mean_absolute_error: 0.0779 - categorical_accuracy: 0.3934 - val_loss: 1.4961 - val_mean_absolute_error: 0.0772 - val_categorical_accuracy: 0.3972\n",
      "\n",
      "Epoch 00097: val_loss did not improve\n",
      "Epoch 98/100\n",
      "1065/1065 [==============================] - 0s 256us/step - loss: 1.5262 - mean_absolute_error: 0.0793 - categorical_accuracy: 0.3822 - val_loss: 1.5565 - val_mean_absolute_error: 0.0785 - val_categorical_accuracy: 0.3634\n",
      "\n",
      "Epoch 00098: val_loss did not improve\n",
      "Epoch 99/100\n",
      "1065/1065 [==============================] - 0s 253us/step - loss: 1.5326 - mean_absolute_error: 0.0794 - categorical_accuracy: 0.3812 - val_loss: 1.5507 - val_mean_absolute_error: 0.0786 - val_categorical_accuracy: 0.3718\n",
      "\n",
      "Epoch 00099: val_loss did not improve\n",
      "Epoch 100/100\n",
      "1065/1065 [==============================] - 0s 251us/step - loss: 1.5210 - mean_absolute_error: 0.0796 - categorical_accuracy: 0.3559 - val_loss: 1.5586 - val_mean_absolute_error: 0.0791 - val_categorical_accuracy: 0.3606\n",
      "\n",
      "Epoch 00100: val_loss did not improve\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0x1a247727f0>"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#fit the model\n",
    "row_model.fit(X_train, y_train,validation_data=(X_test, y_test), batch_size=batches, epochs=epoch,\n",
    "               callbacks=[checkpointer], verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "14"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#testing of the model\n",
    "row_model.load_weights('model_weights/weights.vae_row.h5')\n",
    "row = np.array([0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.300,0.0,0.0,0.0,0.00]).reshape(-1,13)\n",
    "np.argmax(row_model.predict(row))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\" seamless=\"seamless\" src=\"https://plot.ly/~jbp261/4.embed\" height=\"525px\" width=\"100%\"></iframe>"
      ],
      "text/plain": [
       "<plotly.tools.PlotlyDisplay object>"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#plotting the latent variables of the row predicting model\n",
    "z_mean, _, _ = vae_model.encoder.predict(X_train,\n",
    "                                   batch_size=batches)\n",
    "tt = np.array(tt)\n",
    "trace1 = go.Scatter( x = z_mean[:, 0],\n",
    "    y = z_mean[:, 1],\n",
    "    mode='markers',\n",
    "    marker=dict(\n",
    "        size=16,\n",
    "        color = tt, #set color equal to a variable\n",
    "        colorscale='Viridis',\n",
    "        showscale=True\n",
    "    )\n",
    ")\n",
    "data = [trace1]\n",
    "\n",
    "py.iplot(data, filename='row_z_plot')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# '''\n",
    "#     #Argument:\n",
    "#         BLE_array(numpy array): a numpy array containing scaled BLE RSSI values from 13 iBeacons\n",
    "#     #Return:\n",
    "#         position(numpy array):predicted position\n",
    "# '''\n",
    "def predict_position(BLE_array):\n",
    "    #'''returns the predicted position of the user based on the RSSI values'''\n",
    "    #load weights of the models\n",
    "    row_model.load_weights('model_weights/weights.vae_row.h5')\n",
    "    col_model.load_weights('model_weights/weights.vae_col.h5')\n",
    "    sigma,row,col = 1.5,0,0\n",
    "    array = BLE_array.reshape(-1,13)\n",
    "    #prediction based on the deep models\n",
    "    r_mu = np.argmax(row_model.predict(array))\n",
    "    c_mu = np.argmax(col_model.predict(array))\n",
    "    #out of bound checking\n",
    "    while (grid[row,col]==-10):\n",
    "        row = int(np.round(np.random.normal(r_mu, sigma, 1)))\n",
    "        if row > 17:\n",
    "            row = 17\n",
    "        if row < 0:\n",
    "            row = 0\n",
    "        col = int(np.round(np.random.normal(c_mu, sigma, 1)))\n",
    "        if col > 22:\n",
    "            col = 22\n",
    "        if col < 0:\n",
    "            col = 0\n",
    "    return np.array([row,col])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#predict the positions of the unlabeled data using predict_position function\n",
    "ul_df = pd.read_csv('datasets/BLE_UL_col_row.csv')\n",
    "list2 = []\n",
    "for i in range(0,ul_df.shape[0]):\n",
    "    for j in range (0, 13):\n",
    "        list2.append(ul_df.iat[i, j])\n",
    "    y = np.array(list2)\n",
    "    list2.clear()\n",
    "    pos = predict_position(y)\n",
    "    ul_df.iat[i, 13] = pos[1]#col\n",
    "    ul_df.iat[i, 14] = pos[0]#row"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "      <th>col</th>\n",
       "      <th>row</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.866197</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.856115</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.859155</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.850000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.887324</td>\n",
       "      <td>0.951389</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>14</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.880282</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.830986</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   b3001  b3002     b3003  b3004     b3005     b3006     b3007  b3008  b3009  \\\n",
       "0    0.0    0.0  0.857143    0.0  0.866197  1.000000  0.856115    0.0    0.0   \n",
       "1    0.0    0.0  0.857143    0.0  0.859155  1.000000  0.000000    0.0    0.0   \n",
       "2    0.0    0.0  0.850000    0.0  0.887324  0.951389  0.000000    0.0    0.0   \n",
       "3    0.0    0.0  0.000000    0.0  0.880282  1.000000  0.000000    0.0    0.0   \n",
       "4    0.0    0.0  0.000000    0.0  0.830986  1.000000  0.000000    0.0    0.0   \n",
       "\n",
       "   b3010  b3011  b3012  b3013  col  row  \n",
       "0    0.0    0.0    0.0    0.0   12    4  \n",
       "1    0.0    0.0    0.0    0.0   11    6  \n",
       "2    0.0    0.0    0.0    0.0   14    1  \n",
       "3    0.0    0.0    0.0    0.0   11    5  \n",
       "4    0.0    0.0    0.0    0.0   12    5  "
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Save the predicted unlabeled dataset with predicted row and column\n",
    "ul_df.to_csv('datasets/BLE_UL_w_predictedLabels.csv', index=False)\n",
    "ul_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "      <th>col</th>\n",
       "      <th>row</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3689</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.964539</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>13</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>312</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.840278</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2712</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.847826</td>\n",
       "      <td>0.835714</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.763889</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>14</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3695</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.921986</td>\n",
       "      <td>0.866197</td>\n",
       "      <td>0.0</td>\n",
       "      <td>13</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4092</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.878571</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      b3001     b3002     b3003  b3004  b3005     b3006  b3007  b3008  b3009  \\\n",
       "3689    0.0  0.000000  0.000000    0.0    0.0  0.000000    0.0    0.0    0.0   \n",
       "312     0.0  0.000000  0.000000    0.0    0.0  0.840278    0.0    0.0    0.0   \n",
       "2712    0.0  0.847826  0.835714    0.0    0.0  0.763889    0.0    0.0    0.0   \n",
       "3695    0.0  0.000000  0.000000    0.0    0.0  0.000000    0.0    0.0    0.0   \n",
       "4092    0.0  0.891304  0.878571    0.0    0.0  0.000000    0.0    0.0    0.0   \n",
       "\n",
       "      b3010     b3011     b3012  b3013  col  row  \n",
       "3689    0.0  0.964539  0.000000    0.0   13   15  \n",
       "312     0.0  0.000000  0.000000    0.0   11    6  \n",
       "2712    0.0  0.000000  0.000000    0.0   14    3  \n",
       "3695    0.0  0.921986  0.866197    0.0   13   13  \n",
       "4092    0.0  0.000000  0.000000    0.0    9    2  "
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#combine the scaled labeled dataset and scaled unlabeled dataset with predicted row and column\n",
    "l_df = pd.read_csv('datasets/BLE_col_row.csv')\n",
    "lst = []\n",
    "lst.append(l_df)\n",
    "lst.append(ul_df)\n",
    "l_ul_df = pd.concat(lst)\n",
    "l_ul_df = shuffle(l_ul_df)\n",
    "l_ul_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "      <th>col</th>\n",
       "      <th>row</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "      <td>6611.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.122504</td>\n",
       "      <td>0.258204</td>\n",
       "      <td>0.142373</td>\n",
       "      <td>0.145460</td>\n",
       "      <td>0.265142</td>\n",
       "      <td>0.269827</td>\n",
       "      <td>0.089379</td>\n",
       "      <td>0.185543</td>\n",
       "      <td>0.091499</td>\n",
       "      <td>0.085495</td>\n",
       "      <td>0.071149</td>\n",
       "      <td>0.059164</td>\n",
       "      <td>0.071962</td>\n",
       "      <td>11.283921</td>\n",
       "      <td>7.016185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.303678</td>\n",
       "      <td>0.400495</td>\n",
       "      <td>0.315334</td>\n",
       "      <td>0.320173</td>\n",
       "      <td>0.392847</td>\n",
       "      <td>0.393803</td>\n",
       "      <td>0.264775</td>\n",
       "      <td>0.346218</td>\n",
       "      <td>0.267124</td>\n",
       "      <td>0.252349</td>\n",
       "      <td>0.232143</td>\n",
       "      <td>0.214383</td>\n",
       "      <td>0.239513</td>\n",
       "      <td>4.875610</td>\n",
       "      <td>4.557537</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.842276</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.778169</td>\n",
       "      <td>0.798611</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>10.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>17.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             b3001        b3002        b3003        b3004        b3005  \\\n",
       "count  6611.000000  6611.000000  6611.000000  6611.000000  6611.000000   \n",
       "mean      0.122504     0.258204     0.142373     0.145460     0.265142   \n",
       "std       0.303678     0.400495     0.315334     0.320173     0.392847   \n",
       "min       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "25%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "50%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "75%       0.000000     0.842276     0.000000     0.000000     0.778169   \n",
       "max       1.000000     1.000000     1.000000     1.000000     1.000000   \n",
       "\n",
       "             b3006        b3007        b3008        b3009        b3010  \\\n",
       "count  6611.000000  6611.000000  6611.000000  6611.000000  6611.000000   \n",
       "mean      0.269827     0.089379     0.185543     0.091499     0.085495   \n",
       "std       0.393803     0.264775     0.346218     0.267124     0.252349   \n",
       "min       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "25%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "50%       0.000000     0.000000     0.000000     0.000000     0.000000   \n",
       "75%       0.798611     0.000000     0.000000     0.000000     0.000000   \n",
       "max       1.000000     1.000000     1.000000     1.000000     1.000000   \n",
       "\n",
       "             b3011        b3012        b3013          col          row  \n",
       "count  6611.000000  6611.000000  6611.000000  6611.000000  6611.000000  \n",
       "mean      0.071149     0.059164     0.071962    11.283921     7.016185  \n",
       "std       0.232143     0.214383     0.239513     4.875610     4.557537  \n",
       "min       0.000000     0.000000     0.000000     0.000000     0.000000  \n",
       "25%       0.000000     0.000000     0.000000     8.000000     4.000000  \n",
       "50%       0.000000     0.000000     0.000000    10.000000     6.000000  \n",
       "75%       0.000000     0.000000     0.000000    15.000000    10.000000  \n",
       "max       1.000000     1.000000     1.000000    22.000000    17.000000  "
      ]
     },
     "execution_count": 119,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l_ul_df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "      <th>row</th>\n",
       "      <th>col</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3689</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.964539</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>15</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>312</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.840278</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2712</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.847826</td>\n",
       "      <td>0.835714</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.763889</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3695</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.921986</td>\n",
       "      <td>0.866197</td>\n",
       "      <td>0.0</td>\n",
       "      <td>13</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4092</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.878571</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      b3001     b3002     b3003  b3004  b3005     b3006  b3007  b3008  b3009  \\\n",
       "3689    0.0  0.000000  0.000000    0.0    0.0  0.000000    0.0    0.0    0.0   \n",
       "312     0.0  0.000000  0.000000    0.0    0.0  0.840278    0.0    0.0    0.0   \n",
       "2712    0.0  0.847826  0.835714    0.0    0.0  0.763889    0.0    0.0    0.0   \n",
       "3695    0.0  0.000000  0.000000    0.0    0.0  0.000000    0.0    0.0    0.0   \n",
       "4092    0.0  0.891304  0.878571    0.0    0.0  0.000000    0.0    0.0    0.0   \n",
       "\n",
       "      b3010     b3011     b3012  b3013  row  col  \n",
       "3689    0.0  0.964539  0.000000    0.0   15   13  \n",
       "312     0.0  0.000000  0.000000    0.0    6   11  \n",
       "2712    0.0  0.000000  0.000000    0.0    3   14  \n",
       "3695    0.0  0.921986  0.866197    0.0   13   13  \n",
       "4092    0.0  0.000000  0.000000    0.0    2    9  "
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#reindexing the dataframe of labeled and unlabeled data accrding to the state format used in RL learning\n",
    "columnsTitles=['b3001', 'b3002', 'b3003', 'b3004', 'b3005', 'b3006', 'b3007', 'b3008',\n",
    "              'b3009', 'b3010', 'b3011', 'b3012', 'b3013', 'row', 'col']\n",
    "l_ul_df = l_ul_df.reindex(columns=columnsTitles)\n",
    "l_ul_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#the final location to be used in the RL\n",
    "target_loc = np.array([17, 10])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b3001</th>\n",
       "      <th>b3002</th>\n",
       "      <th>b3003</th>\n",
       "      <th>b3004</th>\n",
       "      <th>b3005</th>\n",
       "      <th>b3006</th>\n",
       "      <th>b3007</th>\n",
       "      <th>b3008</th>\n",
       "      <th>b3009</th>\n",
       "      <th>b3010</th>\n",
       "      <th>b3011</th>\n",
       "      <th>b3012</th>\n",
       "      <th>b3013</th>\n",
       "      <th>row</th>\n",
       "      <th>col</th>\n",
       "      <th>distance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.964539</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>15</td>\n",
       "      <td>13</td>\n",
       "      <td>10.816654</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.840278</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>33.136083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.847826</td>\n",
       "      <td>0.835714</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.763889</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "      <td>43.680659</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.921986</td>\n",
       "      <td>0.866197</td>\n",
       "      <td>0.0</td>\n",
       "      <td>13</td>\n",
       "      <td>13</td>\n",
       "      <td>15.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.891304</td>\n",
       "      <td>0.878571</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>45.099889</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   b3001     b3002     b3003  b3004  b3005     b3006  b3007  b3008  b3009  \\\n",
       "0    0.0  0.000000  0.000000    0.0    0.0  0.000000    0.0    0.0    0.0   \n",
       "1    0.0  0.000000  0.000000    0.0    0.0  0.840278    0.0    0.0    0.0   \n",
       "2    0.0  0.847826  0.835714    0.0    0.0  0.763889    0.0    0.0    0.0   \n",
       "3    0.0  0.000000  0.000000    0.0    0.0  0.000000    0.0    0.0    0.0   \n",
       "4    0.0  0.891304  0.878571    0.0    0.0  0.000000    0.0    0.0    0.0   \n",
       "\n",
       "   b3010     b3011     b3012  b3013  row  col   distance  \n",
       "0    0.0  0.964539  0.000000    0.0   15   13  10.816654  \n",
       "1    0.0  0.000000  0.000000    0.0    6   11  33.136083  \n",
       "2    0.0  0.000000  0.000000    0.0    3   14  43.680659  \n",
       "3    0.0  0.921986  0.866197    0.0   13   13  15.000000  \n",
       "4    0.0  0.000000  0.000000    0.0    2    9  45.099889  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#adding the index distance, the distace from the given grid location to the target location, \n",
    "#to labeled and unlabeled dataset\n",
    "#with this step, the dataframe aligns with the state format exatly to be used in RL instance\n",
    "dist = []\n",
    "temp = []\n",
    "\n",
    "for i in range(0,l_ul_df.shape[0]):\n",
    "    for j in range (13, 15):\n",
    "        temp.append(l_ul_df.iat[i, j])\n",
    "    y = np.array(temp)\n",
    "    temp.clear()\n",
    "    dist.append((3 * distance.euclidean(y, target_loc)))\n",
    "l_ul_df['distance'] = pd.DataFrame({ 'distance': dist})\n",
    "l_ul_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'l_ul_df' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-3-75348c840e70>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0ml_ul_df\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'datasets/state_formatted_target_17_10.csv'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'l_ul_df' is not defined"
     ]
    }
   ],
   "source": [
    "#save the dataset\n",
    "l_ul_df.to_csv('datasets/state_formatted_target_17_10.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Episode =  999, score =  11.494, best score = 150.484, steps = 8,  final distance =  24.187,init distance =  46.5733"
     ]
    }
   ],
   "source": [
    "from agent import Agent\n",
    "from task import Task\n",
    "\n",
    "#load the datafiles  \n",
    "l_ul_dis_df=  pd.read_csv('datasets/state_formatted_target_17_10.csv')\n",
    "grid_file = 'grids/objects_grid.npy'\n",
    "iBeacon_loc = 'grids/iBeacon_locations_col_row.npy'\n",
    "labeled_data = 'datasets/state_formatted_target_17_10.csv'#'datasets/BLE_col_row.csv'#\n",
    "#instantiate the task\n",
    "task = Task(grid_file=grid_file, iBeacon_loc=iBeacon_loc, labeled_data=labeled_data, target_pos=target_loc )\n",
    "#instantiate the agent\n",
    "agent = Agent(task)\n",
    "#instantiate the local variables\n",
    "n_episode = 1000\n",
    "rewards = []\n",
    "steps = []\n",
    "list3 = []\n",
    "end_dis = []\n",
    "#E-greedy policy parameters\n",
    "e = 1\n",
    "decay_factor = 0.995\n",
    "\n",
    "for episode in range(1, n_episode):\n",
    "    #for instance in range(0, l_ul_df.shape[0]):\n",
    "        state = agent.reset_episode()\n",
    "     #   for j in range (0, 16):\n",
    "     #       list3.append(l_ul_df.iat[instance, j])\n",
    "     #   state = np.array(list3)\n",
    "     #   list3.clear()\n",
    "        e *= decay_factor\n",
    "        while True:\n",
    "            y = np.random.rand(1)<np.array([e])\n",
    "            if y[0]:\n",
    "                action = np.random.randint(0,4)\n",
    "            else:\n",
    "                action = agent.act(state)\n",
    "            next_state, reward, done = task.step(action)\n",
    "            agent.step(action,reward,next_state,done)\n",
    "            state = next_state\n",
    "            if done:\n",
    "                rewards.append(task.score)\n",
    "                steps.append(agent.steps)\n",
    "                end_dis.append(task.dis_to_target)\n",
    "                #print(\"\\nActions = {} \".format(actions), end=\"\")\n",
    "                print(\"\\rEpisode = {:4d}, score = {:7.3f}, best score = {:7.3f}, steps = {},  final distance = {:7.3f},init distance = {:7.3f}\"\n",
    "                      .format(episode, task.score, task.best_score, agent.steps, task.dis_to_target, \n",
    "                              task.init_dis), end=\"\")\n",
    "                break       \n",
    "        sys.stdout.flush()\n",
    "agent.VAE_act.model.save('model_weights/weights.trainedagent_4.h5')        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "distances = np.array(end_dis)\n",
    "np.save('grids/training_dis_RSSI.npy', distances)\n",
    "poses = np.array(task.best_pos)\n",
    "np.save('grids/training_poses_RSSI.npy', poses)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot the rewards and distace traveled towards the target per episode\n",
    "#images/rewards_distance_plot.png  with lr = 0.01 and discount = 0.80\n",
    "plt.figure(1)\n",
    "plt.subplot(211)\n",
    "plt.plot(rewards)\n",
    "plt.ylabel('Rewards')\n",
    "plt.xlabel('Episodes')\n",
    "plt.title('Rewards vs. Episodes')\n",
    "plt.subplot(212)\n",
    "plt.plot(end_dis)\n",
    "plt.ylabel('Distance')\n",
    "plt.xlabel('Episodes')\n",
    "#plt.title('Distance vs. Episodes')\n",
    "plt.savefig('images/rewards_distance_plot_1.png')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "24.596119187122973"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sum(end_dis)/len(end_dis)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#plot the leabled and unleabled dataset to see the distribution of datapoints on the grid\n",
    "l_ul_df =  pd.read_csv('datasets/state_formatted_target_17_10.csv')\n",
    "\n",
    "# full_grid = np.load('grids/objects_grid.npy')\n",
    "# for i in range(0,l_ul_df.shape[0]):\n",
    "#     full_grid[l_ul_df.iat[i,13],l_ul_df.iat[i,14]] += 1\n",
    "\n",
    "# f, ax = plt.subplots(figsize=(10, 7))\n",
    "# sns.heatmap(full_grid, annot=True, fmt=\"g\", cmap='viridis', ax=ax)\n",
    "# plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>dis_1</th>\n",
       "      <th>dis_2</th>\n",
       "      <th>dis_3</th>\n",
       "      <th>dis_4</th>\n",
       "      <th>dis_5</th>\n",
       "      <th>dis_6</th>\n",
       "      <th>dis_7</th>\n",
       "      <th>dis_8</th>\n",
       "      <th>dis_9</th>\n",
       "      <th>dis_10</th>\n",
       "      <th>dis_11</th>\n",
       "      <th>dis_12</th>\n",
       "      <th>dis_13</th>\n",
       "      <th>row</th>\n",
       "      <th>col</th>\n",
       "      <th>distance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>31.890437</td>\n",
       "      <td>37.947332</td>\n",
       "      <td>36.000000</td>\n",
       "      <td>39.000000</td>\n",
       "      <td>29.546573</td>\n",
       "      <td>27.000000</td>\n",
       "      <td>30.886890</td>\n",
       "      <td>21.633308</td>\n",
       "      <td>30.149627</td>\n",
       "      <td>12.369317</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>15.297059</td>\n",
       "      <td>27.166155</td>\n",
       "      <td>15</td>\n",
       "      <td>13</td>\n",
       "      <td>10.816654</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>18.973666</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>22.847319</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>33.941125</td>\n",
       "      <td>24.738634</td>\n",
       "      <td>24.738634</td>\n",
       "      <td>31.890437</td>\n",
       "      <td>40.804412</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>33.136083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>30.886890</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>17.492856</td>\n",
       "      <td>9.486833</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>23.430749</td>\n",
       "      <td>46.669048</td>\n",
       "      <td>36.249138</td>\n",
       "      <td>33.136083</td>\n",
       "      <td>35.114100</td>\n",
       "      <td>40.804412</td>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "      <td>43.680659</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>28.301943</td>\n",
       "      <td>32.310989</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>33.541020</td>\n",
       "      <td>24.186773</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>25.806976</td>\n",
       "      <td>16.970563</td>\n",
       "      <td>30.149627</td>\n",
       "      <td>12.369317</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>15.297059</td>\n",
       "      <td>27.166155</td>\n",
       "      <td>13</td>\n",
       "      <td>13</td>\n",
       "      <td>15.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>21.633308</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>12.369317</td>\n",
       "      <td>27.166155</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>16.970563</td>\n",
       "      <td>29.546573</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>40.249224</td>\n",
       "      <td>36.000000</td>\n",
       "      <td>37.947332</td>\n",
       "      <td>45.000000</td>\n",
       "      <td>53.075418</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>45.099889</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       dis_1      dis_2      dis_3      dis_4      dis_5      dis_6  \\\n",
       "0  31.890437  37.947332  36.000000  39.000000  29.546573  27.000000   \n",
       "1  18.973666  10.816654  10.816654  22.847319   6.000000   6.000000   \n",
       "2  30.886890  15.000000   3.000000  12.000000  17.492856   9.486833   \n",
       "3  28.301943  32.310989  30.000000  33.541020  24.186773  21.000000   \n",
       "4  21.633308   3.000000  12.369317  27.166155  12.000000  16.970563   \n",
       "\n",
       "       dis_7      dis_8      dis_9     dis_10     dis_11     dis_12  \\\n",
       "0  30.886890  21.633308  30.149627  12.369317   3.000000  15.297059   \n",
       "1  21.000000  10.816654  33.941125  24.738634  24.738634  31.890437   \n",
       "2  15.000000  23.430749  46.669048  36.249138  33.136083  35.114100   \n",
       "3  25.806976  16.970563  30.149627  12.369317   3.000000  15.297059   \n",
       "4  29.546573  21.000000  40.249224  36.000000  37.947332  45.000000   \n",
       "\n",
       "      dis_13  row  col   distance  \n",
       "0  27.166155   15   13  10.816654  \n",
       "1  40.804412    6   11  33.136083  \n",
       "2  40.804412    3   14  43.680659  \n",
       "3  27.166155   13   13  15.000000  \n",
       "4  53.075418    2    9  45.099889  "
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#create a dataframe that has distance of each iBeacon from target position for a given datapoint in the \n",
    "#combined dataframe along with the row column and distance columns to match the state format for RL learning\n",
    "\n",
    "col_nms = ['dis_' + str(i) for i in range(1, 14)]\n",
    "l_ul_dis_df = DataFrame( columns = col_nms)\n",
    "dis_ph = []\n",
    "\n",
    "for j in range(0,13):\n",
    "    for i in range(0,l_ul_df.shape[0]):\n",
    "        #Distace is multiplier by three due to the fact that each grid cell is approx. 3m by 3m\n",
    "        dis_ph.append(3 * distance.euclidean(np.array([l_ul_df.iat[i,14],l_ul_df.iat[i,13]]), b_loc[j]))\n",
    "    l_ul_dis_df['dis_' + str(j+1)] = pd.DataFrame({ col_nms[j]: dis_ph})\n",
    "    dis_ph.clear()\n",
    "l_ul_dis_df['row'] = l_ul_df['row']\n",
    "l_ul_dis_df['col'] = l_ul_df['col']\n",
    "l_ul_dis_df['distance'] = l_ul_df['distance']\n",
    "l_ul_dis_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1a0447f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#remove any redundant datapoints on a given grid and plot the grid to see which grid locations have datapoints\n",
    "l_ul_dis_df = l_ul_dis_df.drop_duplicates()#subset = ['row','col']\n",
    "l_ul_dis_df.shape\n",
    "full_grid = np.load('grids/objects_grid.npy')\n",
    "for i in range(0,l_ul_dis_df.shape[0]):\n",
    "    full_grid[l_ul_dis_df.iat[i,13],l_ul_dis_df.iat[i,14]] += 1\n",
    "\n",
    "f, ax = plt.subplots(figsize=(10, 7))\n",
    "sns.heatmap(full_grid, annot=True, fmt=\"g\", cmap='viridis', ax=ax)\n",
    "plt.show()\n",
    "l_ul_dis_df.to_csv('datasets/state_formatted_distance_target_17_10.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Episode =  999, score =  11.494, best score = 153.192, steps = 8,  final distance =  24.187, init distance =  46.5733"
     ]
    }
   ],
   "source": [
    "from agent import Agent\n",
    "from task import Task\n",
    "\n",
    "#load the datafiles  \n",
    "l_ul_dis_df=  pd.read_csv('datasets/state_formatted_distance_target_17_10.csv')\n",
    "grid_file = 'grids/objects_grid.npy'\n",
    "iBeacon_loc = 'grids/iBeacon_locations_col_row.npy'\n",
    "labeled_data = 'datasets/state_formatted_distance_target_17_10.csv'#'datasets/BLE_col_row.csv'#\n",
    "#instantiate the task\n",
    "task = Task(grid_file=grid_file, iBeacon_loc=iBeacon_loc, labeled_data=labeled_data, target_pos=target_loc )\n",
    "#instantiate the agent\n",
    "agent = Agent(task)\n",
    "#instantiate the local variables\n",
    "n_episode = 1000\n",
    "rewards = []\n",
    "steps = []\n",
    "list3 = []\n",
    "end_dis = []\n",
    "#E-greedy policy parameters\n",
    "e = 1\n",
    "decay_factor = 0.995\n",
    "\n",
    "for episode in range(1, n_episode):\n",
    "    #for instance in range(0, l_ul_df.shape[0]):\n",
    "        state = agent.reset_episode()\n",
    "     #   for j in range (0, 16):\n",
    "     #       list3.append(l_ul_df.iat[instance, j])\n",
    "     #   state = np.array(list3)\n",
    "     #   list3.clear()\n",
    "        e *= decay_factor\n",
    "        while True:\n",
    "            y = np.random.rand(1)<np.array([e])\n",
    "            if y[0]:\n",
    "                action = np.random.randint(0,4)\n",
    "            else:\n",
    "                action = agent.act(state)\n",
    "            next_state, reward, done = task.step(action)\n",
    "            agent.step(action,reward,next_state,done)\n",
    "            state = next_state\n",
    "            if done:\n",
    "                rewards.append(task.score)\n",
    "                steps.append(agent.steps)\n",
    "                end_dis.append(task.dis_to_target)\n",
    "                #print(\"\\nActions = {} \".format(actions), end=\"\")\n",
    "                print(\"\\rEpisode = {:4d}, score = {:7.3f}, best score = {:7.3f}, steps = {},  final distance = {:7.3f}, init distance = {:7.3f}\"\n",
    "                      .format(episode, task.score, task.best_score, agent.steps, task.dis_to_target, task.init_dis), end=\"\")\n",
    "                break       \n",
    "        sys.stdout.flush()\n",
    "        agent.VAE_act.model.save('model_weights/weights.trainedagent_2.h5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAETCAYAAAA7wAFvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzsnXd4VMXawH9b0gtJIHRBehUVEKSK\nIAIKghoFC15EsFwFUa8UQUGwgCj3IqiIfoiCNEUFFaUjgqFKDVVaSA/p2bTdPef7Y7Ob3WRrdjd1\nfs/Dw+7ZOTPv7J7MO2+ZGYUsyzICgUAgqLUoK1sAgUAgEFQuQhEIBAJBLUcoAoFAIKjlCEUgEAgE\ntRyhCAQCgaCWIxSBQCAQ1HLUlS2AoHbQrl072rZti1KpRKFQkJ+fT3BwMHPmzOGWW26pNLnmzp1L\neHg4kyZNqvC2lyxZwrfffkuDBg0srvfr14///Oc/Nu9LTk7m5ZdfZt26dR6R4/bbb+fnn3+madOm\nHqlPUP0QikBQYXz99ddERESY3v/f//0f77zzDuvXr69EqSqX++67j7feesulexo0aOAxJSAQgFAE\ngkpCp9ORmJhInTp1TNc+++wztm3bhiRJNGnShNmzZ3Pq1ClWrFjBmjVrABgyZAj3338/kydPJikp\niaioKPbu3cvy5cvZuXMnBQUF5OfnM23aNAYPHsySJUs4fvw4KSkptGvXjjlz5jBz5kzOnTtH/fr1\nUalUdOvWDYA1a9awbt06fHx88PPzY+7cubRu3dokn16vZ+DAgXzyySd07twZgClTptCjRw969uzJ\nzJkzKSoqQpZloqKieOKJJ9z6jsaOHUvHjh05evQoGRkZjBw5ksmTJxMXF8eIESM4duwYly5dstqu\nVqtl/vz5REdHo1Kp6NKlCzNmzCA4OJgjR44wb948FAoFt9xyC5IkmdrctWsXn332GVqtFn9/f6ZN\nm8btt99usx1BDUEWCCqAtm3bysOHD5eHDx8u9+nTRx44cKA8b948+caNG7Isy/KPP/4oT5kyRdZq\ntbIsy/K6devkCRMmyPn5+XLXrl3lrKws+fr163KfPn3k0aNHy7Isy6tXr5Znz54tx8XFyWPHjpXz\n8/NlWZblX375RR4+fLgsy7L88ccfy0OGDDHV++6778pTp06VJUmS09LS5P79+8sff/yxrNPp5E6d\nOsnJyckmedatW1emH4sXL5bffvttWZZlOTMzU+7Ro4ecnZ0tz5gxQ/78889lWZbllJQUecqUKbJe\nr7f7nXz88cdyz5495QceeMDi3969e2VZluUnn3xSnjhxolxUVCRnZWXJQ4YMkXft2iVfv35dvu22\n22RZlm22u3jxYvmll16Si4qKZL1eL0+fPl1+88035cLCQrl3797yX3/9JcuyLP/8889y27Zt5evX\nr8tXrlyRhw8fLqenp8uyLMsXLlyQ+/TpI2s0mnL1T1B9EBaBoMIwuoZiYmJ49tln6dmzJ3Xr1gVg\n9+7dnDp1iocffhgASZLIz8/H39+f3r17s3//fjIyMhg9ejTr168nJyeHXbt2MWHCBJo0acIHH3zA\nzz//zLVr1zhx4gQajcbU7m233YZabXjUo6OjeeONN1AoFERERDB48GAAVCoVQ4cOZcyYMQwYMIC+\nffty1113lenDww8/TFRUFNOnT+eXX35h4MCBhISEMHjwYKZNm8bJkyfp1asXs2bNQql0nIvhyDU0\nevRofHx88PHxYejQoezbt482bdqYPrfV7t69e3nllVfw8fEBDNbFiy++yIULF1Cr1fTq1QuA4cOH\nm9rfv38/KSkpjBs3zlS/QqEgNja23P0TVA/ELymocDp16sSMGTOYPn06cXFxgGHgnzBhAps2bWLT\npk1s3LiRtWvXAnDPPfewd+9e9u/fT9++fbnjjjvYsWMHFy5coEePHsTExDB69Ghyc3Pp06cPEyZM\nsGgvMDDQ4r1str2WSqUyvf7www9ZtmwZzZo1Y/ny5bz66qtlZG/SpAkdO3Zkz549/PDDD0RFRQFw\n9913s3XrVoYNG8bZs2cZMWIESUlJbn9XRgVmlLv04GurXUmSUCgUpnKSJKHVasv037wNSZLo1auX\n6TfYtGkTGzZsoE2bNl7rn6BqIBSBoFIYPnw4Xbp04f333wegb9++fP/99+Tm5gKwePFipk6dCsDA\ngQOJjo7m7NmzdOnShT59+rB48WL69++PSqXi8OHDdO7cmaeffpoePXqwc+dO9Hq91Xb79evH999/\njyRJZGVlsXPnTgDS09O56667CAsLY9y4cUyZMoVTp05ZrePRRx/liy++ID8/3xRfeO2119iyZQv3\n338/s2fPJjg4mNjYWLe/p82bN5tk/e233xg4cKDF57ba7devH2vXrkWr1SJJEt9++y19+vShXbt2\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x117cda4a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot the rewards and distace traveled towards the target per episode\n",
    "#images/rewards_distance_plot.png  with lr = 0.01 and discount = 0.80\n",
    "plt.figure(1)\n",
    "plt.subplot(211)\n",
    "plt.plot(rewards)\n",
    "plt.ylabel('Rewards')\n",
    "plt.xlabel('Episodes')\n",
    "plt.title('Rewards vs. Episodes')\n",
    "plt.subplot(212)\n",
    "plt.plot(end_dis)\n",
    "plt.ylabel('Distance')\n",
    "plt.xlabel('Episodes')\n",
    "plt.title('Distance vs. Episodes')\n",
    "plt.savefig('images/rewards_distance_plot_1.png')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1420 entries, 0 to 1419\n",
      "Data columns (total 15 columns):\n",
      "b3001    1420 non-null float64\n",
      "b3002    1420 non-null float64\n",
      "b3003    1420 non-null float64\n",
      "b3004    1420 non-null float64\n",
      "b3005    1420 non-null float64\n",
      "b3006    1420 non-null float64\n",
      "b3007    1420 non-null float64\n",
      "b3008    1420 non-null float64\n",
      "b3009    1420 non-null float64\n",
      "b3010    1420 non-null float64\n",
      "b3011    1420 non-null float64\n",
      "b3012    1420 non-null float64\n",
      "b3013    1420 non-null float64\n",
      "col      1420 non-null int64\n",
      "row      1420 non-null int64\n",
      "dtypes: float64(13), int64(2)\n",
      "memory usage: 166.5 KB\n"
     ]
    }
   ],
   "source": [
    "l_df = pd.read_csv('datasets/BLE_col_row.csv')\n",
    "l_df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1420 entries, 0 to 1419\n",
      "Data columns (total 16 columns):\n",
      "dis_1       1420 non-null float64\n",
      "dis_2       1420 non-null float64\n",
      "dis_3       1420 non-null float64\n",
      "dis_4       1420 non-null float64\n",
      "dis_5       1420 non-null float64\n",
      "dis_6       1420 non-null float64\n",
      "dis_7       1420 non-null float64\n",
      "dis_8       1420 non-null float64\n",
      "dis_9       1420 non-null float64\n",
      "dis_10      1420 non-null float64\n",
      "dis_11      1420 non-null float64\n",
      "dis_12      1420 non-null float64\n",
      "dis_13      1420 non-null float64\n",
      "row         1420 non-null int64\n",
      "col         1420 non-null int64\n",
      "distance    1420 non-null float64\n",
      "dtypes: float64(14), int64(2)\n",
      "memory usage: 177.6 KB\n"
     ]
    }
   ],
   "source": [
    "#prepare a dataset using only labeled data to train the RL agent\n",
    "#the dataset contains the distance of the thirteen iBeacons from a given data point\n",
    "#along with rows, columns and distance from the target point\n",
    "col_nms = ['dis_' + str(i) for i in range(1, 14)]\n",
    "l_dis_df = DataFrame( columns = col_nms)\n",
    "dis_ph = []\n",
    "\n",
    "for j in range(0,13):\n",
    "    for i in range(0,l_df.shape[0]):\n",
    "        #Distace is multiplier by three due to the fact that each grid cell is approx. 3m by 3m\n",
    "        dis_ph.append(3 * distance.euclidean(np.array([l_df.iat[i,14],l_df.iat[i,13]]), b_loc[j]))\n",
    "    l_dis_df['dis_' + str(j+1)] = pd.DataFrame({ col_nms[j]: dis_ph})\n",
    "    dis_ph.clear()\n",
    "l_dis_df['row'] = l_df['row']\n",
    "l_dis_df['col'] = l_df['col']\n",
    "dist = []\n",
    "temp = []\n",
    "\n",
    "for i in range(0,l_df.shape[0]):\n",
    "    for j in range (13, 15):\n",
    "        temp.append(l_df.iat[i, j])\n",
    "    y = np.array(temp)\n",
    "    temp.clear()\n",
    "    dist.append((3 * distance.euclidean(y, target_loc)))\n",
    "l_dis_df['distance'] = pd.DataFrame({ 'distance': dist})\n",
    "l_dis_df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 105 entries, 0 to 1342\n",
      "Data columns (total 16 columns):\n",
      "dis_1       105 non-null float64\n",
      "dis_2       105 non-null float64\n",
      "dis_3       105 non-null float64\n",
      "dis_4       105 non-null float64\n",
      "dis_5       105 non-null float64\n",
      "dis_6       105 non-null float64\n",
      "dis_7       105 non-null float64\n",
      "dis_8       105 non-null float64\n",
      "dis_9       105 non-null float64\n",
      "dis_10      105 non-null float64\n",
      "dis_11      105 non-null float64\n",
      "dis_12      105 non-null float64\n",
      "dis_13      105 non-null float64\n",
      "row         105 non-null int64\n",
      "col         105 non-null int64\n",
      "distance    105 non-null float64\n",
      "dtypes: float64(14), int64(2)\n",
      "memory usage: 13.9 KB\n"
     ]
    }
   ],
   "source": [
    "#remove redundant points from the dataset\n",
    "l_dis_df = l_dis_df.drop_duplicates(subset = ['row','col'])#\n",
    "l_dis_df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>dis_1</th>\n",
       "      <th>dis_2</th>\n",
       "      <th>dis_3</th>\n",
       "      <th>dis_4</th>\n",
       "      <th>dis_5</th>\n",
       "      <th>dis_6</th>\n",
       "      <th>dis_7</th>\n",
       "      <th>dis_8</th>\n",
       "      <th>dis_9</th>\n",
       "      <th>dis_10</th>\n",
       "      <th>dis_11</th>\n",
       "      <th>dis_12</th>\n",
       "      <th>dis_13</th>\n",
       "      <th>row</th>\n",
       "      <th>col</th>\n",
       "      <th>distance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>21.633308</td>\n",
       "      <td>40.804412</td>\n",
       "      <td>48.836462</td>\n",
       "      <td>60.745370</td>\n",
       "      <td>33.941125</td>\n",
       "      <td>43.266615</td>\n",
       "      <td>56.364883</td>\n",
       "      <td>28.301943</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>36.000000</td>\n",
       "      <td>51.000000</td>\n",
       "      <td>63.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>14</td>\n",
       "      <td>28.460499</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>25.806976</td>\n",
       "      <td>45.000000</td>\n",
       "      <td>53.075418</td>\n",
       "      <td>64.899923</td>\n",
       "      <td>38.183766</td>\n",
       "      <td>47.434165</td>\n",
       "      <td>60.373835</td>\n",
       "      <td>32.449961</td>\n",
       "      <td>9.486833</td>\n",
       "      <td>27.166155</td>\n",
       "      <td>39.115214</td>\n",
       "      <td>54.083269</td>\n",
       "      <td>66.068147</td>\n",
       "      <td>0</td>\n",
       "      <td>15</td>\n",
       "      <td>30.594117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>24.186773</td>\n",
       "      <td>43.266615</td>\n",
       "      <td>50.911688</td>\n",
       "      <td>62.425956</td>\n",
       "      <td>36.124784</td>\n",
       "      <td>45.000000</td>\n",
       "      <td>57.706152</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>6.708204</td>\n",
       "      <td>24.186773</td>\n",
       "      <td>36.124784</td>\n",
       "      <td>51.088159</td>\n",
       "      <td>63.071388</td>\n",
       "      <td>1</td>\n",
       "      <td>15</td>\n",
       "      <td>27.658633</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>30.886890</td>\n",
       "      <td>49.929951</td>\n",
       "      <td>57.314920</td>\n",
       "      <td>68.410526</td>\n",
       "      <td>42.638011</td>\n",
       "      <td>51.088159</td>\n",
       "      <td>63.285069</td>\n",
       "      <td>36.124784</td>\n",
       "      <td>12.727922</td>\n",
       "      <td>28.460499</td>\n",
       "      <td>40.024992</td>\n",
       "      <td>54.744863</td>\n",
       "      <td>66.610810</td>\n",
       "      <td>0</td>\n",
       "      <td>17</td>\n",
       "      <td>30.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>29.546573</td>\n",
       "      <td>48.373546</td>\n",
       "      <td>55.317267</td>\n",
       "      <td>66.068147</td>\n",
       "      <td>40.804412</td>\n",
       "      <td>48.836462</td>\n",
       "      <td>60.745370</td>\n",
       "      <td>33.941125</td>\n",
       "      <td>10.816654</td>\n",
       "      <td>25.632011</td>\n",
       "      <td>37.107951</td>\n",
       "      <td>51.788030</td>\n",
       "      <td>63.639610</td>\n",
       "      <td>1</td>\n",
       "      <td>17</td>\n",
       "      <td>27.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        dis_1      dis_2      dis_3      dis_4      dis_5      dis_6  \\\n",
       "0   21.633308  40.804412  48.836462  60.745370  33.941125  43.266615   \n",
       "1   25.806976  45.000000  53.075418  64.899923  38.183766  47.434165   \n",
       "7   24.186773  43.266615  50.911688  62.425956  36.124784  45.000000   \n",
       "8   30.886890  49.929951  57.314920  68.410526  42.638011  51.088159   \n",
       "13  29.546573  48.373546  55.317267  66.068147  40.804412  48.836462   \n",
       "\n",
       "        dis_7      dis_8      dis_9     dis_10     dis_11     dis_12  \\\n",
       "0   56.364883  28.301943   6.000000  24.000000  36.000000  51.000000   \n",
       "1   60.373835  32.449961   9.486833  27.166155  39.115214  54.083269   \n",
       "7   57.706152  30.000000   6.708204  24.186773  36.124784  51.088159   \n",
       "8   63.285069  36.124784  12.727922  28.460499  40.024992  54.744863   \n",
       "13  60.745370  33.941125  10.816654  25.632011  37.107951  51.788030   \n",
       "\n",
       "       dis_13  row  col   distance  \n",
       "0   63.000000    1   14  28.460499  \n",
       "1   66.068147    0   15  30.594117  \n",
       "7   63.071388    1   15  27.658633  \n",
       "8   66.610810    0   17  30.000000  \n",
       "13  63.639610    1   17  27.000000  "
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l_dis_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11b1ec9e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot the grid to see which grid locations have datapoints\n",
    "full_grid = np.load('grids/objects_grid.npy')\n",
    "for i in range(0,l_dis_df.shape[0]):\n",
    "    full_grid[l_dis_df.iat[i,13],l_dis_df.iat[i,14]] += 1\n",
    "\n",
    "f, ax = plt.subplots(figsize=(10, 7))\n",
    "sns.heatmap(full_grid, annot=True, fmt=\"g\", cmap='viridis', ax=ax)\n",
    "plt.show()\n",
    "l_dis_df.to_csv('datasets/state_formatted_distance_target_17_10_labeled.csv', index=False)\n",
    "np.save('grids/grid_labeled.npy',full_grid) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Episode =  999, score =  23.437, best score =  27.410, steps = 51,  final distance =  37.947, init distance =  46.573"
     ]
    }
   ],
   "source": [
    "#load all the data files\n",
    "grid_file = 'grids/grid_labeled.npy'\n",
    "iBeacon_loc = 'grids/iBeacon_locations_col_row.npy'\n",
    "labeled_data = 'datasets/state_formatted_distance_target_17_10_labeled.csv'#'datasets/BLE_col_row.csv'#\n",
    "#instantiate the task\n",
    "task = Task(grid_file=grid_file, iBeacon_loc=iBeacon_loc, labeled_data=labeled_data, target_pos=target_loc )\n",
    "#instantiate the agent\n",
    "agent = Agent(task)\n",
    "#instantiate the local variables\n",
    "n_episode = 1000\n",
    "rewards = []\n",
    "steps = []\n",
    "list3 = []\n",
    "end_dis = []\n",
    "#instantiate e-greedy policy variables\n",
    "e = 1\n",
    "decay_factor = 0.995\n",
    "\n",
    "for episode in range(1, n_episode):\n",
    "    #for instance in range(0, l_ul_df.shape[0]):\n",
    "        state = agent.reset_episode()\n",
    "     #   for j in range (0, 16):\n",
    "     #       list3.append(l_ul_df.iat[instance, j])\n",
    "     #   state = np.array(list3)\n",
    "     #   list3.clear()\n",
    "        e *= decay_factor\n",
    "        while True:\n",
    "            y = np.random.rand(1)<np.array([e])\n",
    "            if y[0]:\n",
    "                action = np.random.randint(0,4)\n",
    "            else:\n",
    "                action = agent.act(state)\n",
    "            next_state, reward, done = task.step(action)\n",
    "            agent.step(action,reward,next_state,done)\n",
    "            state = next_state\n",
    "            if done:\n",
    "                rewards.append(task.score)\n",
    "                steps.append(agent.steps)\n",
    "                end_dis.append(task.dis_to_target)\n",
    "                #print(\"\\nActions = {} \".format(actions), end=\"\")\n",
    "                print(\"\\rEpisode = {:4d}, score = {:7.3f}, best score = {:7.3f}, steps = {},  final distance = {:7.3f}, init distance = {:7.3f}\"\n",
    "                      .format(episode, task.score, task.best_score, agent.steps, task.dis_to_target, task.init_dis), end=\"\")\n",
    "                break       \n",
    "        sys.stdout.flush()\n",
    "        agent.VAE_act.model.save('model_weights/weights.trainedagent_3.h5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a2746d588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot the rewards and distace traveled towards the target per episode\n",
    "#images/rewards_distance_plot.png  with lr = 0.01 and discount = 0.80\n",
    "plt.figure(1)\n",
    "plt.subplot(211)\n",
    "plt.plot(rewards)\n",
    "plt.ylabel('Rewards')\n",
    "plt.xlabel('Episodes')\n",
    "plt.title('Rewards vs. Episodes')\n",
    "plt.subplot(212)\n",
    "plt.plot(end_dis)\n",
    "plt.ylabel('Distance')\n",
    "plt.xlabel('Episodes')\n",
    "#plt.title('Distance vs. Episodes')\n",
    "plt.savefig('images/rewards_distance_plot_labeled.png')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
